Я не уверен, что полностью согласен с другими ответами здесь;Ответ biziclop верен, но я не уверен, что мы можем сделать вывод, что вы в безопасности, если не будем знать больше подробностей.
В простом случае чередование может выглядеть так:
Thread 1 (writer) Thread 2 (Writer) Thread 3 (Reader)
----------------- ----------------- -----------------
flag = true;
if (flag) {
flag = true;
flag = false;
doStuff();
, и это может быть хорошо (второй набор от flag
до true
не имеет значения, так как doStuff()
все еще, вероятно, будет видеть все, что нужно потоку 2.
Однако есливы изменяете порядок, в котором поток 3 выполняет:
Thread 1 (writer) Thread 2 (Writer) Thread 3 (Reader)
----------------- ----------------- -----------------
flag = true;
if (flag) {
doStuff();
flag = true;
flag = false;
, тогда обновление потока 2. может быть потеряно.
Конечно, вы должны быть осторожны с тем, что делает поток 2, чтобы убедиться, чтовидим в потоке 3. Если есть другое состояние, которое необходимо установить в потоке 2, порядок также становится важным там.
В простом случае да, все в порядке, но если он становится более сложным, чем простое нажатие кнопкифлаги, тогда об этом становится гораздо сложнее рассуждать.