Если я блокирую при записи в переменную, я должен также заблокировать при чтении, если чтение является в других отношениях атомарным?

Смотрите на следующую ссылку, Пример получает Хеш MD5 предоставленного изображения: Хеш MD5 Изображения

5
задан Orion Edwards 23 July 2009 в 04:16
поделиться

3 ответа

блокировка в C # (и, как правило, Monitor , до которого он расширяется в .NET) является барьером памяти, в частности, барьером чтения при получении, написать барьер при выпуске. Что касается энергозависимого , он добавляет барьер для каждого чтения и записи в поле. Итак, да, вы должны быть в безопасности с volatile (при условии, что остальная часть вашего кода, который вы не показали, все делает правильно).

3
ответ дан 15 December 2019 в 06:32
поделиться

Если бы у вас не было m_context, вам не понадобилась бы блокировка, поскольку и чтение, и запись являются атомарными. Если, однако, при чтении m_client вы также используете m_context, то вам необходимо заблокировать оба, чтобы предотвратить ситуацию, когда происходит переключение контекста после обновления m_client, но перед обновлением m_context.

0
ответ дан 15 December 2019 в 06:32
поделиться

Если я помню, производительность невысока, но вы можете использовать ReaderWriterLock для реализации 1 писатель и несколько читателей.

0
ответ дан 15 December 2019 в 06:32
поделиться
Другие вопросы по тегам:

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