在编写多线程应用程序时,遇到的最常见问题之一是死锁。
我对社区的问题是:
什么是死锁?
你如何检测它们?
你会处理它们吗?
最后,您如何防止它们发生?
当多个进程试图同时访问同一个资源时,就会发生 锁定。
一个进程失败,必须等待另一个进程完成。
当等待进程在完成之前仍然持有第一个需要的另一个资源时,就会发生 死锁。
所以,举个例子:
资源 A 和资源 B 被进程 X 和进程 Y 使用
避免死锁的最好方法是避免进程以这种方式交叉。尽可能减少锁定任何东西的需要。
在数据库中,避免在单个事务中对不同的表进行大量更改,避免触发器并尽可能切换到乐观/脏/无锁读取。