Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Параллелизм
Раздел: Синхронизация
Атомарный Доступ
Домашняя страница > Существенные Классы > Параллелизм

Атомарный Доступ

В программировании атомарное действие является тем, которое эффективно происходит внезапно. В середине не может остановиться атомарное действие: это или происходит полностью, или это не происходит вообще. Никакие побочные эффекты атомарного действия не видимы, пока действие не полно.

Мы уже видели что выражение инкремента, такой как c++, не описывает атомарное действие. Даже очень простые выражения могут определить сложные действия, которые могут разложиться в другие действия. Однако, есть действия, можно определить, что являются атомарными:

Атомарные действия не могут быть чередованы, таким образом, они могут использоваться без страха перед интерференцией потока. Однако, это не избавляет от всей необходимости синхронизировать атомарные действия, потому что ошибки непротиворечивости памяти все еще возможны. Используя volatile переменные уменьшают риск ошибок непротиворечивости памяти, потому что любая запись к a volatile переменная устанавливает происхождение - перед отношением с последующими чтениями той же самой переменной. Это означает что изменения для a volatile переменная всегда видима к другим потокам. К тому же, это также означает это, когда поток читает a volatile переменная, это видит не только последнее изменение к volatile, но также и побочные эффекты кода, который привел изменение.

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

Некоторые из классов в java.util.concurrent пакет обеспечивает атомарные методы, которые не полагаются на синхронизацию. Мы обсудим их в разделе по Высокоуровневым Объектам Параллелизма.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Внутренние Блокировки и Синхронизация
Следующая страница: живой