Подход, который я использовал, и я думаю, это правильно, это
volatile bool b = false;
.. rarely signal an update with a large state change...
lock b_lock
{
b = true;
//other;
}
... another thread ...
if(b)
{
lock b_lock
{
if(b)
{
//other stuff
b = false;
}
}
}
цель состояла в том, чтобы избежать необходимости повторной блокировки объекта на каждой итерации, просто чтобы проверить, нужно ли нам его блокировать, чтобы предоставить большой объем информации об изменении состояния, что происходит редко. Я думаю этот подход работает. И если требуется абсолютная согласованность, я думаю, volatile подойдет для b bool.