我有一个多线程程序,我需要避免死锁。有什么方法可以避免多线程死锁吗?
提前致谢。
避免死锁是正确设计的问题。将多线程(或多进程)应用程序组合在一起是自找麻烦。更糟糕的是,测试不足以证明没有死锁。
您可以采用适合此类事情的编程范式。通信顺序过程 (CSP) 是专门为避免死锁、竞争等而发明的。维基百科上的JCSP页面是一个值得阅读的好页面。这个想法使得陷入僵局等变得非常困难,而且您还可以在数学上证明(如果您感到勇敢)您的设计没有此类问题。
不幸的是,微软已经很难在 Windows 中本地或在 .NET 中实现 CSP 程序。需要的是一个在管道上工作的 select(),这在 MS 领域中并不存在。我不想想到 JCSP 团队必须跨越哪些障碍才能让他们的等价物(用他们的话来说是替代品)工作。