Тупик при блокировке manualResetEvent

Я обнаружил тупик, вызванный блокировкой экземпляра manualResetEvent. Я не могу понять, как это решить. Буду признателен за любую помощь.

У меня есть 2 метода в классе, выполняемые разными потоками:

private ManualResetEvent _event = new ManualResetEvent (true);

private void process(){
  ...
  lock(_event){
    _event.WaitOne();
    ...
  }
}

internal void Stop(){
  _event.Reset();
  lock(_event){
    ...
  }
}

Первый поток установил блокировку и заблокирован в _event.WaitOne ();

Поток socond выполнил строку _event .Сброс(); и блокируется при попытке выполнить блокировку (_event).

Я думал, что когда поток 1 заблокирован на WaitOne, блокировку следует снять. Думаю, я ошибаюсь. Не знаю, как это исправить. кстати - я добавил блокировку, поскольку код в блоке блокировки должен быть синхронизирован в обоих потоках.

Еще раз спасибо и извините за длинный пост.

7
задан skaffman 16 March 2011 в 08:37
поделиться