Параллелизм интервала Java ++ международный эквивалент AtomicInteger.incrementAndGet ()?

Действительно ли эти два эквивалентны? Другими словами, ++ и - атомарные операторы?

int i = 0;
return ++i;

AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
9
задан Finbarr 5 May 2010 в 07:12
поделиться

2 ответа

Нет, ++ i фактически представляет собой три инструкции (загрузка i , увеличение, сохранение в i ). Это определенно не атомарно.

13
ответ дан 4 December 2019 в 11:04
поделиться

Операция ++ не является атомарной в java, потому что она состоит из трех операций

  1. Прочитать сохраненное значение (атомарное)
  2. Добавляет одну к нему (атомарное)
  3. Сохранение значения (атомарное)

Таким образом, определенно может случиться что-то плохое между

В случае long это еще сложнее, потому что даже сама операция чтения не является атомарной.

Я нашел хорошую статью, в которой рассказывается о модели памяти

http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic

6
ответ дан 4 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: