Атомность IF и следующее утверждение
Это книга А. Уильямса C++ "Параллельность в действии", стек без блокировок с темой указателей опасности. Предположим, я понял это, за исключением двух строк, вот они ( источник здесь):
// code before
if (old_head) {
res.swap(old_head->data);
// code after
Вопрос в следующем: может ли другой поток удалить (изменить и т. Д.) Указатель "old_head", прежде чем он будет разыменован (old_head->data)? Логика говорит, что нет, потому что весь код Уильямса ошибочен, но я сомневаюсь, что это некая атомарная операция. Как вы думаете?
1 ответ
Решение
Если old_head
доступно для нескольких потоков, и блок кода в кавычках не защищен никаким механизмом синхронизации, тогда да old_head
может быть изменен между проверкой и разыменованием. if
Само по себе утверждение не гарантирует атомарности.