title: Both blocking and non blocking queue
body: <p>I need to set up a producer-consumer scheme with two threads linked by a queue (the producer pushing tasks into the queue, the consumer executing them as they come).</p>
  
  <p>Since the queue will be empty most of the time I must make it so that the consumer thread can sleep and be woken up as soon as something is pushed by the producer. However I must ensure that the producer is never blocked, not even shortly. In other words, I need some one-sided blocking queue.</p>
  
  <p>There are lock free queues, but since those are by definition, well, lock free, it isn't possible for the consumer thread to be blocked by them.</p>
  
  <p>I have thought of associating a lock free queue with a condition variable. When the consumer thread finds the queue empty it would sleep waiting for the condition to be notified. The producer thread would notify the condition when pushing a task into the queue waking up the consumer thread (if it was sleeping). However, condition variable must be protected by mutex, that mean there is still a small chance for the producer thread to be blocked when trying to acquire it to notify the condition.</p>
  
  <p>I have yet to find a really good way to solve this problem so your ideas are more then welcome.</p>
  
  <p>Note : I'm planning to use boost thread to implement this.</p>
  
  <p>Note 2 : I'm not considering the case where the producer trys to push something and the queue is full. This is never going to happen.</p>