Изменчивые переменные и использование блоков синхронизации

1

Правильно ли говорить, что волатильный примитив:

1) Требуется синхронизация для неатомных операций. 2) Не требуется синхронизация для атомных операций, например:

volatile bool selector;
selector = true;
  • 0
    bool - это C ++; boolean - это Java.
Теги:

2 ответа

1

Если вы просто переназначаете изменчивую переменную, она не требует синхронизации. Это идея, стоящая за ними.

Фактически, в этом случае он даже не должен быть изменчивым, потому что новое значение true не зависит от старого значения selector поэтому не имеет значения, был ли он изменен другим потоком.

1

По документации Oracle Java:

Чтения и записи являются атомарными для всех переменных, объявленных volatile (включая длинные и двойные переменные).

Значение/назначение использования декларации volatile такое же, как использование блока synchronize. Нет, вам не нужно синхронизировать доступ к изменчивой переменной

Что касается компромисса между ними, то в той же документации говорится:

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

  • 2
    В добрую минуту меня смутила ваша иконка / имя, когда, черт возьми, я ответил на этот вопрос :)
  • 0
    @Durandal Ха-ха! Когда я увидел, что Дюрандаль дал другой ответ на этот вопрос, я был уверен, что недавно общался с ним, но я не смог найти его нигде в его истории! Вот о чем я говорю
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню