размышление об очереди сообщений

Мы реализовали очередь сообщений с помощью C # Queue . Мы знаем, что у нас есть только ОДИН потребитель, который может извлечь доступное сообщение из очереди для обработки с помощью цикла while . Мы также знаем, что есть только ОДИН производитель, который помещает сообщение в очередь.

У нас есть блокировка для указанной выше очереди сообщений, чтобы гарантировать, что потребитель и производитель не могут получить доступ к очереди одновременно.

Мой вопрос: необходима ли блокировка ? Если очередь увеличивает свое свойство Count ПОСЛЕ , элемент фактически добавлен, и если потребитель проверяет Count перед извлечением, потребитель должен получить полный элемент сообщения, даже если у нас нет этой блокировки . Правильно? Таким образом, мы не столкнемся с проблемой частичного сообщения. Затем мы можем избавиться от этой блокировки ?

той блокировки , которая замедлит работу системы, и иногда мы можем видеть, что поток извлечения заблокирован на некоторое время, потому что у нас очень тяжелая производитель.

РЕДАКТИРОВАТЬ:

К сожалению, мы используем .Net 3.5.

5
задан casperOne 18 January 2011 в 21:34
поделиться