相关疑难解决方法(0)

Monitor.Wait需要同步吗?

我已经开发了一个通用的生产者 - 消费者队列,它由Monitor以下列方式产生脉冲:

入队:

    public void EnqueueTask(T task)
    {
        _workerQueue.Enqueue(task);
        Monitor.Pulse(_locker);
    }
Run Code Online (Sandbox Code Playgroud)

出队:

private T Dequeue()
    {
        T dequeueItem;
        if (_workerQueue.Count > 0)
        {
               _workerQueue.TryDequeue(out dequeueItem);
            if(dequeueItem!=null)
                return dequeueItem;
        }
        while (_workerQueue.Count == 0)
            {
                Monitor.Wait(_locker);
        }
         _workerQueue.TryDequeue(out dequeueItem);
        return dequeueItem;
    }
Run Code Online (Sandbox Code Playgroud)

wait部分产生以下SynchronizationLockException:"从一个不同步的代码块中调用了对象同步方法"我是否需要同步它?为什么?使用ManualResetEvents还是Slim版本的.NET 4.0会更好吗?

c# synchronization monitor producer-consumer

7
推荐指数
1
解决办法
4403
查看次数

标签 统计

c# ×1

monitor ×1

producer-consumer ×1

synchronization ×1