From: Sean Kelly <sean@invisibleduck.org>
void put(T val) {
    synchronized (cond.mutex) {
        queue.pushBack(val);
        cond.notify(); // atomically unlocks mutex on call, locks on return
    }
}
Huh, I thought notify did not unlock the mutex at all (I don't see why it would need to).

-Steve