I have two threads and a Queue<string>. The first thread doing some performance critical work in a loop and it checks the Queue<string> each iteration, grabbing the string if Queue is not empty.
Now I need the second thread to safely put strings in a Queue. Only the second thread should wait when the 1st thread isn't doing anything with the Queue. I don't want to use lock because it will be blocking the 1st thread eventually slowing it down.
How can I do that? I tried to surround only Enqueue() in my 2nd thread with the lock statement, but the ReSharper is warning me that:
the field is sometimes used inside synchronized block and sometimes used without synchronization.
So I guess I'm not doing it right.