Мы реализовали очередь сообщений с помощью C # Queue
. Мы знаем, что у нас есть только ОДИН потребитель, который может извлечь доступное сообщение из очереди для обработки с помощью цикла while
. Мы также знаем, что есть только ОДИН производитель, который помещает сообщение в очередь.
У нас есть блокировка
для указанной выше очереди сообщений, чтобы гарантировать, что потребитель и производитель не могут получить доступ к очереди одновременно.
Мой вопрос: необходима ли блокировка
? Если очередь
увеличивает свое свойство Count
ПОСЛЕ , элемент фактически добавлен, и если потребитель проверяет Count
перед извлечением, потребитель должен получить полный элемент сообщения, даже если у нас нет этой блокировки
. Правильно? Таким образом, мы не столкнемся с проблемой частичного сообщения. Затем мы можем избавиться от этой блокировки
?
той блокировки
, которая замедлит работу системы, и иногда мы можем видеть, что поток извлечения заблокирован на некоторое время, потому что у нас очень тяжелая производитель.
РЕДАКТИРОВАТЬ:
К сожалению, мы используем .Net 3.5.