急速学习 C#死锁
一、什么是死锁
死锁指的是两个或两个以上的线程各自持有对方所需的资源,并一直等待对方释放资源,进而导致所有线程都在等待,那么每个线程都无法释放占用的资源,这样就产生了死锁。常见的情况就是 C 端的 UI 线程发生死锁,导致界面停止响应无法工作。举个例子,小明和小红在饭店吃饭,桌子上有两道菜,每道菜都有一双公筷,并且每道菜只能用指定的公筷夹取,只有在公筷放在桌子上的情况下,他们才能吃到菜。但是他们两个人分别拿着两道才的公筷不放下,都在等待对方放下公筷去吃另一道菜,这时就产生了死锁。我们将这个例子代码化,如下:
复制代码
二、如何解决
如果要解决这个问题,有四种方法:
破坏互斥条件;
破坏环路等待条件;
破坏不剥夺条件;
破坏请求和保持条件。
一般来说常用的方法是方法四,修改后的代码如下:
复制代码
版权声明: 本文为 InfoQ 作者【喵叔】的原创文章。
原文链接:【http://xie.infoq.cn/article/0c0b988887c838b3097ffdf9d】。未经作者许可,禁止转载。
评论