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