2010-05-05 3 views

ответ

13

Нет, ++i на самом деле три инструкции (нагрузки i, приращение, хранить в i). Это определенно не атомарно.

+0

Вот что я подумал. Чтение значения, значение приращения, получение значения. – Finbarr

+2

И даже не атомный, если 'i' объявлен как' volatile'. –

6

операция ++, не является атомарным в Java, поскольку он состоит из трех операций

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

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

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

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

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

Смежные вопросы