Нужна ли синхронизация функции, возвращающей переменную?

Запишите это в свой метод загрузки формы MDI.

Controls.OfType<MdiClient>().FirstOrDefault().BackColor = Color.Purple;
5
задан John Kugelman 23 February 2019 в 18:20
поделиться

4 ответа

Если ключевое слово volatile используется с переменной, все потоки получат последнее значение переменной из основной памяти. Обратите внимание, что он не получает блокировку, поэтому, если вы хотите выполнить какую-либо атомарную операцию, volatile недостаточно. Для атомарных операций используется synchronized. В вашем случае вы только читаете значение m_gameState = a_gameState;, так что энергозависимо достаточно.

Надеюсь, это поможет.

0
ответ дан Code_Mode 23 February 2019 в 18:20
поделиться

Доступ к энергозависимой переменной действует так, как если бы она была синхронизирована сама по себе.

Доступ к энергозависимой переменной никогда не удерживает блокировку, он не подходит для случаев, когда мы хотим читать-обновлять-записывать как элементарную операцию. Здесь необходимо использовать синхронизированный блок.

Для других случаев будет достаточно, если вы не использовали синхронизацию (как обычные get и set)

0
ответ дан Vaibhav Gupta 23 February 2019 в 18:20
поделиться

Это зависит. Требуете ли вы, чтобы обновления вашего поля EGameState были упорядочены или нет?
Если они должны быть упорядочены, то блок synchronized (на this) является обязательным, если нет, то volatile достаточно.

0
ответ дан LppEdd 23 February 2019 в 18:20
поделиться

volatile автоматическая загрузка / сохранение в заборе; чтение и запись являются атомарными; вам не нужно ничего синхронизировать в опубликованном примере.

0
ответ дан Johnny V 23 February 2019 в 18:20
поделиться
Другие вопросы по тегам:

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