Потокобезопасный код - C#
Формулировка задачи:
Всем добрый день!
Мне нужно разработать свойство, которое разрешает одновременно получать значение поля в нескольких потоках. После того, как все читатели завершают процесс чтения, возникает событие.
Вот этот кусок кода надо сделать потокобезопасным. Ведь может получиться так, что, после проверки условия, переменная countReaders увеличится на единицу в другом потоке. А в этом случае событие не должно наступить.
Встречал что-то такое:
Но я что-то не верю этому коду или что-то не понимаю или ничего не понимаю. Объясните, пожалуйста, или хотя бы направьте в нужном направлении.
public string SharedRes { get { // Some safety code Interlocked.Increment(ref countReaders); // увеличиваем счетчик читателей DoSomeWork(); if (Interlocked.Decrement(ref countReaders) == 0) { writerWork.Set(); } return sharedRes; } set { //Some code } }
if (Interlocked.Decrement(ref countReaders) == 0) { writerWork.Set(); }
lock(countReaders as object) { if (Interlocked.Decrement(ref countReaders) == 0) { writerWork.Set(); } }
Решение задачи: «Потокобезопасный код»
textual
Листинг программы
lock(countReaders) { }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д