我有一个多线程程序,我需要避免死锁。有没有什么方法可以避免多线程中的死锁?
先谢谢。
答案 0 :(得分:2)
避免死锁是一个适当的设计问题。将多线程(或多进程)应用程序混合在一起会遇到麻烦。更糟糕的是,测试并不足以证明缺乏僵局。
您可以采用适合此类事物的编程范例。通信顺序进程(CSP)是专门为避免死锁,竞赛等而发明的。阅读的好页面是维基百科上的JCSP页面。这个想法让人很奇怪地陷入僵局等等,你也可以在数学上证明(如果你有勇气)你的设计没有这些问题。
不幸的是,微软已经很难在Windows中以原生或在.NET中实现CSP程序。我们需要的是一个适用于管道的select(),它在MS域中不存在。我不愿意想想JCSP团队必须跳过什么障碍才能获得他们的等效(用他们的用语替代)。