Является ли изменение значения карты атомарной операцией?

Мне было интересно, если синхронизация или необходимо использовать параллельный класс, или, наоборот, является ли потокобезопасным использование непараллельного класса и отсутствие синхронизации на карте в многопоточной среде, если единственная модификация карты — это изменение значений карты.

Причина, по которой я спрашиваю об этом, заключается в том, что HashMap (и другая документация по неконкурентным картам) имеет следующий комментарий:

Обратите внимание, что эта реализация не синхронизирована. Если несколько потоков одновременно обращаются к хеш-карте и хотя бы один из потоки изменяют карту структурно, она должнабыть синхронизируется извне. (Структурной модификацией является любая операция который добавляет или удаляет одно или несколько отображений; просто изменить значение связанный с ключом, который уже содержится в экземпляре, не является структурная модификация.) Обычно это достигается путем синхронизация на некотором объекте, который естественным образом инкапсулирует карту.

Это наводит меня на мысль, что если модификация не является структурной (т. е. нет добавления или удаления), я должен иметь возможность обновлять (неконкурентную) карту без синхронизации.

Я правильно понимаю? то естьЯвляется ли обновление значения на карте атомарным процессом?

8
задан templatetypedef 11 March 2012 в 21:24
поделиться