public void EnqueueItem (Action item) { lock (_locker) { _itemQ.Enqueue (item); Monitor.Pulse (_locker); } } public void Consumer() { Action item; lock (_locker) { while (_itemQ.Count == 0) Monitor.Wait (_locker); item = _itemQ.Dequeue(); } item(); } я про while в Consumer. Почему не if? Ведь Pulse запускает только один ждущий поток после того как добавил в очередь задание, значит проснувшийся после Wait поток гарантированно увидит очередь не пустой
Обсуждают сегодня