System.Collections.Queue<T>, threads, locking and synchronization.
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:

1. 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?
2. should I perhaps use `Queue.Synchronized()` to get a wrapper, and if so: will that impact performance compared to the original queue?
System.Collections.Queue<T>, threads, locking and synchronization.
===

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:

1. 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?
2. should I perhaps use `Queue.Synchronized()` to get a wrapper, and if so: will that impact performance compared to the original queue?