Imagine that you yourself performed TPL itself and used regular queues that did not duplicate work. So, for each queue, you have one thread that pushes and pushes the queues from the tail and several threads that can take queues from the head (called thieves in the document). Since you want to make sure that each task added to the queue is deleted exactly once (selecting or removing), you need to use a lock in each of the three operations.
In a sense, blocking push and pop seems pretty wasteful when you know that only one thread will use these operations. But there is nothing you can do about it if you want to make sure that the queue is behaving correctly.
, , , , . , ? , , , . , .
, , , , . ? , , . : , , .
, pop push, , , , : , .
EDIT: :
, , , !
, , . .
3 . 6, ?
.
? .
, . , , , , , . , . , . : .
pop push ?
, , . , , , . pop , .