Ожидает ли поток, пока он не сможет редактировать (на примере addAndGet) атомарную переменную? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть два потока и одно атомное целое число.Оба запускают цикл из 1000 итераций.Один поток увеличивается на единицу, другой уменьшается на единицу.Результат в конце 0.
Пока хорошо.
Но а) один поток ожидает следующего оператора, когда не может редактировать переменную, потому что произошел сбой CAS или b = есть ли у каждого потока второй фоновый поток (созданный неявно), который редактирует переменную и ожидает, пока он не сможет редактировать переменную?
Второе предположение (b) не имеет смысла, так как я получаю возвращаемое значение, но лучше спросить.

1 Ответ

0 голосов
/ 05 мая 2019

AtomicInteger использует синхронизацию уровня оборудования / ЦП, и потоки будут ждать определенное время, прежде чем попытка CAS не удастся (предположение a. Частично верно). В этой вики более подробная информация https://en.wikipedia.org/wiki/Compare-and-swap

...