I would like to understand how much code is shared between the 2 concurrent_queue implementations. From what I understand the bounded variant supports blocking semantics (I am not so interested in the bounded capacity feature).
What I would like to understand is, does the bounded_queue variant take care of the "thundering herd" problem? From what I can understand from the code, when the queue is empty and a thread tries to do a blocking pop() it is put to a waiting state (WaitForSingleObject). But what happens when X items are pushed to the queue - are all waiting threads woken up or only X threads are woken up? I think it is the latter but I want to confirm.
Also when I am using the default concurrent_bounded_queue (unbounded) are there any performance differences between the concurrent_queue and concurrent_bounded_queue for general push and pop ?