理解C#锁

时间:2016-06-06 11:28:41

标签: c# multithreading locking

我正在做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()函数?

0 个答案:

没有答案