Ответ 1
t3
, в отличие от двух других потоков, не выполняет атомную добавку. Вместо этого он атомарно загружает a
, выполняет арифметику (добавляет 1) на временную и атомарно сохраняет это новое значение обратно в a
. Это перезаписывает a
независимо от атомных операций, которые могли произойти между ними.
Таким образом, вы можете иметь следующий сценарий:
-
t1
илиt2
атомное приращениеa
, которое теперь равно 1. -
t3
атомарно загружается 1. -
t1
илиt2
атомное приращениеa
, которое теперь равно 2. -
t3
выполняет неатомную добавку на ранее загруженном значении и атомарно сохраняет назад 2.