Это , вероятно, своего рода потокобезопасный.
Безопасность потоков обычно зависит от контекста. Обновление bool является всегда потокобезопасным, если вы никогда не читаете из него.
И если вы читаете с него, то ответ зависит от , когда вы читаете с него, и от того, что означает это чтение.
На некоторых процессорах, но не на всех, запись в объект типа bool
будет атомарной. Процессоры x86 обычно делают его атомарным, а другие нет. Если обновление не является атомарным, добавление volatile
вам не поможет.
Но следующая проблема - это переупорядочение. Компилятор (и ЦП) будут выполнять чтение / запись переменных volatile
в указанном порядке, без переупорядочения. Так что это хорошо.
Но это не гарантирует переупорядочения одного доступа к памяти volatile
относительно всех не volatile
. Таким распространенным примером является то, что вы определяете какой-то флаг для защиты доступа к ресурсу, вы делаете флаг volatile
, а затем компилятор перемещает доступ к ресурсу вверх, так что это происходит за до , когда вы проверяете флаг , Это разрешено делать, потому что это не переупорядочение внутреннего порядка двух volatile
обращений, а просто volatile
и не-1027 * одного.
Честно говоря, я задам вопрос почему бы просто не сделать это правильно ?
Возможно, что volatile
будет работать в этой ситуации, но почему бы не избавить себя от проблем и не прояснить, что это правильно? Вместо этого наложите на него барьер памяти.