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