Я унаследовал немного многопоточного кода, и после его просмотра я нахожу структуры, подобные этой (в методе фонового потока):
private ManualResetEvent stopEvent = new ManualResetEvent(false);
private void Run_Thread() {
while (!stopEvent.WaitOne(0, true)) {
// code here
}
}
Обычно существует публичный или приватный Stop()
метод, например:
public void Stop() {
stopEvent.Set();
bgThread.Join();
}
Мой вопрос таков: что обслуживается здесь при помощи дескриптора ожидания? Кажется, что это сделано для того, чтобы сигнализация об остановке была атомарной операцией, но я думал, что запись в логическое значение в любом случае была атомарной. Если это так, есть ли причина не просто использовать следующее:
private void Run_Thread() {
while(!stop) {
// code here
}
}
public void Stop() {
stop = true;
bgThread.Join();
}