在处理线程(特别是C)中使用互斥锁和信号量时,是否有一个简单的经验法则来避免死锁并且干净的同步?
解决方法
一个很好的简单的经验法则是始终从应用程序中的任何地方以一致的可预测顺序获取锁定.例如,如果您的资源具有名称,请始终按字母顺序锁定它们.如果它们有数字ID,请始终从最低到最高锁定.确切的顺序或标准是任意的.关键是要保持一致.这样就不会有僵局.例如.
>线程1锁定资源A
>线程2锁定资源B
>线程1等待获取B上的锁
>线程2等待获取A上的锁
>死锁
如果您遵循上述规则,上述情况永远不会发生.有关更详细的讨论,请参阅Wikipedia entry on the Dining Philosophers problem.