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