我正在做c#课程并找到了这个锁的例子:
public class MessageQueue<T>
{
private readonly object _sync = new object();
private readonly Queue<T> _queue = new Queue<T>();
public void Post(T message)
{
lock (_sync)
{
bool wasEmpty = _queue.Count == 0;
_queue.Enqueue(message);
if (wasEmpty)
{
Monitor.Pulse(_sync);
}
}
}
public T Get()
{
lock (_sync)
{
while (_queue.Count == 0)
{
Monitor.Wait(_sync);
}
return _queue.Dequeue();
}
}
}
是正确的例子吗?如果有什么东西会尝试获取它会等待的项目,但是如果项目被锁定,其他线程将不允许发布消息并使用Pulse()函数?