Предположим, что существуют два потока, выполняющих Thread1() и Thread2() соответственно. Нить 1 просто устанавливает глобальный флаг, чтобы сообщить, что поток 2 прекратит работу, а поток 2 периодически проверяет, должен ли он выйти.
volatile bool is_terminate = false;
void Thread1()
{
is_terminate = true;
}
void Thread2()
{
while (!is_terminate) {
// ...
}
}
Я хочу спросить, безопасен ли этот код в предположении, что доступ к is_terminate является атомарным. Я уже знаю, что многие материалы утверждают, что volatile не может обеспечить безопасность потока вообще. Но в ситуации, когда разделяется только одна атомная переменная, действительно ли нам нужно защитить общую переменную с помощью блокировки?