Что может произойти, если два потока одновременно обращаются к одной и той же переменной bool?

У меня есть кроссплатформенная программа на C ++, в которой я использую библиотеки boost для создания асинхронного таймера.
У меня есть глобальная переменная:

bool receivedInput = false;

Один поток ожидает и обрабатывает ввод

string argStr;
while (1) 
{
     getline(cin, argStr);
     processArguments(argStr);
     receivedInput = true;
}

Другой поток запускает таймер, при котором обратный вызов вызывается каждые 10 секунд. В этом обратном вызове я проверяю, получил ли я сообщение

if (receivedInput)
{
    //set up timer to fire again in 10 seconds
    receivedInput = false;
}
else
    exit(1);

. Это безопасно? Для чтения в потоке 2, я думаю, это не имеет значения, поскольку условие будет оцениваться как истинное или ложное. Но я не уверен, что произойдет, если оба потока попытаются установить значение ReceiveInput одновременно. Я также увеличил свой таймер в 3 раза по сравнению с ожидаемым периодом получения ввода, поэтому меня не беспокоит состояние гонки.

Изменить: Чтобы решить эту проблему, я использовал boost :: unique_lock, когда я устанавливал receiveInput, и boost :: shared_lock, когда я читал receiveInput. Я использовал пример из здесь

5
задан Community 23 May 2017 в 11:45
поделиться