I have a Queue<T>
field that is accessed by various threads. Enequeue()
is called from multiple threads many times per second, while there is a single thread that performs the Dequeue()
and Count
operations.
I havent been thinking much about this until now, since I played it "safe" and used lock
on a static object before any operations with this queue. While there currently aren't any performance issue, I would like to get rid of the locks if they are redundant. My questions are:
- since I never iterate through the queue, are locks really needed in this situation? I mean, will the program crash when it happens that one thread enqueues and the second thread dequeues elements at exactly the same time?
- should I perhaps use
Queue.Synchronized()
to get a wrapper, and if so: will that impact performance compared to the original queue?