У меня есть приложение, в котором работает 2 потока... Есть ли какой-либо certanty, что, когда я изменяю глобальную переменную из одного потока, другой заметил это изменение? У меня нет никакой синхронизации или системы взаимного исключения на месте... но должен ли этот код работать все время (представьте себе глобальный bool с именем dataUpdated):
Тема 1:
while(1) {
if (dataUpdated)
updateScreen();
doSomethingElse();
}
Тема 2:
while(1) {
if (doSomething())
dataUpdated = TRUE;
}
Компилятор вроде gcc оптимизирует этот код таким образом, чтобы он не проверял глобальное значение, учитывая его значение во время компиляции (потому что он не изменился при одном и том же thred)?
PS: Как это для игрового приложения, действительно неважно, будет ли прочитано, пока значение будет написано... все, что имеет значение, - это то, что изменение замечено другим потоком.