我了解线程的基础知识以及死锁是如何发生的。我了解您希望按特定顺序打开锁,以帮助确保您不会陷入循环行刑队。
我的大脑遇到的问题是如何保证该顺序以及究竟如何等待和脉冲(pulseall)辅助。
不要回答skeet关于多线程的文章的链接,因为我就是从那里来的。我也用谷歌搜索了所以并想出了这篇文章。
在 Jon 的教程中,Produce() 和 Consume 方法都锁定在 listlock 上,我看不到订单是如何维护的。不管命令一个人击败另一个人,那么另一个人如何获得锁定?不对...所以最后一个尝试锁定的线程坐在那里阻塞,直到第一个到达脉冲或等待取决于?
所以不确定我寻找其他文章,在上面的 SO 文章中,我带着老板、工人和锁定的对象电话回答了 Gatopeich 的问题。
工作人员在工作时锁定电话。当他有锁(同时)为真时,他会解锁???带有 monitor.wait 语句的电话......???
同时老板锁手机……但是等下,员工怎么能准时上班,在老板赶到之前锁手机……?
Jon 指出,如果你不理解这一点,你会认为它会陷入僵局,这正是我所处的位置:
重复一遍:调用 Wait 会解锁您正在等待的监视器。这是很重要的一点,因为否则代码看起来会死锁!
所以我很抱歉如此密集并将其视为鸡或蛋的场景。显然,在指定获取锁的顺序以避免死锁时,我不了解线程如何交互。
感谢您的帮助和耐心。