C# 线程死锁
我有一个C语言的多线程程序。在实践中防止死锁的最佳方法是什么 是时间锁吗 另外,可以用来帮助检测和防止死锁的最佳工具是什么C# 线程死锁,c#,multithreading,C#,Multithreading,我有一个C语言的多线程程序。在实践中防止死锁的最佳方法是什么 是时间锁吗 另外,可以用来帮助检测和防止死锁的最佳工具是什么 非常感谢。这不是C语言特有的。你应该总是按照明确的顺序来学习。 互联网上有很多信息,比如,你可以看看这里 死锁通常发生在以下几种情况下: 您正在使用多个锁,但未按正确顺序锁定/解锁它们。因此,您可能会创建一个线程持有锁a并需要锁B,而另一个线程需要锁a并持有锁B的情况。这两个线程都不能继续。这是因为每个线程都以不同的顺序锁定 当使用可重入锁并将其锁定的次数超过解锁次数时。见
非常感谢。这不是C语言特有的。你应该总是按照明确的顺序来学习。 互联网上有很多信息,比如,你可以看看这里
死锁通常发生在以下几种情况下: 您正在使用多个锁,但未按正确顺序锁定/解锁它们。因此,您可能会创建一个线程持有锁a并需要锁B,而另一个线程需要锁a并持有锁B的情况。这两个线程都不能继续。这是因为每个线程都以不同的顺序锁定 当使用可重入锁并将其锁定的次数超过解锁次数时。见这一相关问题: 当使用Monitor.Wait/Monitor.Pulse作为信号机制时,但必须调用Wait的线程无法在另一个线程调用Pulse且信号丢失时到达调用。您可以使用AutoResetEvent来获得持久信号 您有一个工作线程轮询标志以知道何时停止。主线程设置标志并尝试加入工作线程,但您忘记了将标志设置为易失性
只有一个好工具,在你的耳朵之间。检测它从来都不难。避免死锁的最好方法就是不要使用锁!否则,要小心!有一些经验法则可以提供适度的帮助,比如总是以相同的顺序获得。也应在设计中考虑。