Смотрите на следующую ссылку, Пример получает Хеш MD5 предоставленного изображения: Хеш MD5 Изображения
блокировка
в C # (и, как правило, Monitor
, до которого он расширяется в .NET) является барьером памяти, в частности, барьером чтения при получении, написать барьер при выпуске. Что касается энергозависимого
, он добавляет барьер для каждого чтения и записи в поле. Итак, да, вы должны быть в безопасности с volatile
(при условии, что остальная часть вашего кода, который вы не показали, все делает правильно).
Если бы у вас не было m_context, вам не понадобилась бы блокировка, поскольку и чтение, и запись являются атомарными. Если, однако, при чтении m_client вы также используете m_context, то вам необходимо заблокировать оба, чтобы предотвратить ситуацию, когда происходит переключение контекста после обновления m_client, но перед обновлением m_context.
Если я помню, производительность невысока, но вы можете использовать ReaderWriterLock для реализации 1 писатель и несколько читателей.