Атомность IF и следующее утверждение

Это книга А. Уильямса «Параллелизм C ++ в действии», стек без блокировок с темой указателей опасности. Предположим, я понял это, за исключением двух строк, вот они ( источник Вот):

// code before
if (old_head) {
res.swap(old_head->data);
// code after

Вопрос в следующем: может ли другой поток удалить (изменить и т. Д.) Указатель «old_head», прежде чем он будет разыменован (old_head-> data)? Логика говорит, что нет, потому что весь код Уильямса ошибочен, но я сомневаюсь, что это некая атомарная операция. Как вы думаете?

0

Решение

Если old_head доступно для нескольких потоков, и блок кода в кавычках не защищен никаким механизмом синхронизации, тогда да old_head может быть изменен между проверкой и разыменованием. if Само по себе утверждение не гарантирует атомарности.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]