Атомность 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 Само по себе утверждение не гарантирует атомарности.

Другие вопросы по тегам