У меня есть поле Queue<T>
, доступ к которому осуществляется различными потоками.Enequeue()
вызывается из нескольких потоков много раз в секунду, в то время как существует один поток, который выполняет операции Dequeue()
и Count
.
Я не очень задумывался над этимдо сих пор, поскольку я играл "безопасно" и использовал lock
для статического объекта перед любыми операциями с этой очередью.Хотя в настоящее время нет проблем с производительностью, я бы хотел избавиться от блокировок, если они избыточны.Мои вопросы:
- , поскольку я никогда не перебираю очередь, нужны ли блокировки в этой ситуации?Я имею в виду, произойдет ли сбой программы, когда случится так, что один поток поставит в очередь элементы, а второй поток удалит элементы из очереди в ровно в одно и то же время?
- следует ли мне использовать
Queue.Synchronized()
, чтобы получить оболочку,и если да, то повлияет ли это на производительность по сравнению с исходной очередью?