Задать вопрос
@ander822
Начинающий

Как правильно дожидаться в одном потоке пока другой поток не изменит значение переменной?

Есть два потока и переменная со значением null.
Один из потоков должен изменить значение этой переменной, а второй поток должен дождаться этого и использовать ее значение в дальнейших расчетах.
Сейчас у меня второй поток дожидается изменения переменной в бесконечном цикле
while(SomeVariable == null)
{

}
...

Существуют ли другие способы сделать тоже самое? Возможно более изящные.
  • Вопрос задан
  • 303 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
Заранее создаете
var waitEvent = new ManualResetEvent(false);
В одном потоке, где нужна уже инициализированная переменная
waitEvent.Wait();
В другом:
SomeVariable = new ...
waitEvent.Set();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
devspec
@devspec
Помогло? Отметь решением
Eсли переменная целочисленная, то можно через Interlocked.Read
Любые другие типы можно через Monitor проверять:

while(true)
{
    Monitor.Enter();
    if(SomeVariable == null) {
       // do something
    }
    Monitor.Exit();
}
...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы