Vb.net 多线程中的synclock是否可以避免死锁

Vb.net 多线程中的synclock是否可以避免死锁,vb.net,multithreading,Vb.net,Multithreading,我有一个多线程程序,需要避免死锁。有什么方法可以避免多线程中的死锁吗 提前感谢。避免死锁是正确设计的问题。将一个多线程(或多进程)的应用程序拼凑在一起会带来麻烦。更糟糕的是,测试并不能充分证明没有死锁 您可以采用适合这种情况的编程范例。通信顺序进程(CSP)是专门为避免死锁、竞争等而发明的。维基百科上的页面是一个很好的阅读页面。这个想法让死锁等问题变得异常困难,而且你还可以用数学证明(如果你觉得勇敢的话)你的设计没有这些问题 不幸的是,微软已经使得在Windows中以本机方式或在.NET中实现C

我有一个多线程程序,需要避免死锁。有什么方法可以避免多线程中的死锁吗


提前感谢。

避免死锁是正确设计的问题。将一个多线程(或多进程)的应用程序拼凑在一起会带来麻烦。更糟糕的是,测试并不能充分证明没有死锁

您可以采用适合这种情况的编程范例。通信顺序进程(CSP)是专门为避免死锁、竞争等而发明的。维基百科上的页面是一个很好的阅读页面。这个想法让死锁等问题变得异常困难,而且你还可以用数学证明(如果你觉得勇敢的话)你的设计没有这些问题


不幸的是,微软已经使得在Windows中以本机方式或在.NET中实现CSP程序变得困难。现在需要的是一个在管道上工作的select(),这在MS land中是不存在的。我不愿意去想JCSP团队必须跨越哪些障碍才能让他们的等价物(用他们的话说是替代品)发挥作用。

按照正确的顺序做事。使用消息传递设计。死锁是无法避免的,但对您来说要实现起来要困难得多:)+1-如果显式锁和对象队列更少,那么多线程问题就会少得多。@MartinJames,我完全同意。我只希望能有更多的学生接受这样的教育!我还意识到,在QPI和超级传输的这些日子里,通过管道复制数据不一定效率低下,而且可能效率更高。我认为这会产生与共享数据类似的QPI/超级传输流量。哦,给我一台现代化的Transputer!正如你可能知道的,“线程简介”网站/书籍的标准通常是不好的。我对这些资源的“试金石”是“如果它在第一页提到join(),那就糟透了”。