【发布时间】:2017-09-19 08:44:40
【问题描述】:
根据MSDN:
Monitor 类由静态(在 C# 中)或共享(在 Visual Basic) 对控制访问的对象进行操作的方法 临界区。为每个维护以下信息 同步对象:
对当前持有锁的线程的引用。
对就绪队列的引用,其中包含准备好获取锁的线程。
对 waiting 队列的引用,其中包含等待通知锁定状态更改的线程 对象。
在这个thread 中,两个队列引起了一些微妙的问题。
我认为上述线程中问题的根本原因是有 2 个队列。如果只有 ONE 队列,则每当Monitor.Pulse() 时,只能调度该单个队列中的一个线程运行。 多个线程不可能同时处于就绪状态。所以这个问题永远不会发生。
那么为什么 Monitor 保留 2 个队列?
【问题讨论】:
-
@HenkHolterman 感谢您的评论。但实际上我的问题是受到那个问题的启发。该线程的解决方案是正确的。
标签: c# multithreading queue