Использование SpinWait при внешнем обновлении значения

У меня есть следующий код, который хорошо работает:

      while (mmf.ReadState() != MyAction.Confirmed)
{
    Thread.Yield();
}

Этот код ожидает, пока другой поток обновит байт в файле с отображением памяти. После другого потока (который выполняется из другого AppDomain / исполняемый файл) готов, этот код можно продолжить.

Однако если я заменю его на:

      SpinWait.SpinUntil(() => mmf.ReadState() == MyAction.Confirmed);

или даже:

      var spinWait = new SpinWait();
while (mmf.ReadState() != MyAction.Confirmed)
{
    spinWait.SpinOnce();
}

Код висит на неопределенное время. Я знаю, что есть множество других примитивов синхронизации, которые я мог бы использовать, но это работает, пока я использую этот жесткий while() петля.

Почему бы не SpinWait.SpinOnce() имеют тот же эффект, что и Thread.Yield()? Могу ли я что-нибудь сделать? SyncronizationContext или что-то в этом роде), чтобы код мог использовать встроенный SpinWait класс?

0 ответов

Другие вопросы по тегам