我有两个线程,一个线程处理队列,另一个线程将东西添加到队列中。同步异常
- 我希望把队列处理线程睡眠时,其处理完队列
- 我希望有第二个线程告诉它醒来时,它已经将产品添加到队列
然而,这些函数调用System.Threading.SynchronizationLockException: Object synchronization method was called from an unsynchronized block of code
上Monitor.PulseAll(waiting);
呼叫,因为我还没有同步的功能与所述等待对象。 [我不想这样做,我希望能够在向队列中添加项目时进行处理]。我怎样才能做到这一点?
Queue<object> items = new Queue<object>();
object waiting = new object();
1日螺纹
public void ProcessQueue()
{
while (true)
{
if (items.Count == 0)
Monitor.Wait(waiting);
object real = null;
lock(items) {
object item = items.Dequeue();
real = item;
}
if(real == null)
continue;
.. bla bla bla
}
}
第二个主题涉及
public void AddItem(object o)
{
... bla bla bla
lock(items)
{
items.Enqueue(o);
}
Monitor.PulseAll(waiting);
}
我正在使用锁,只是没有他们在示例代码 – Kurru 2010-03-29 14:48:52