In my mind condition variables are stored under "crap I don't need to know because we have better abstractions". I can understand why RethinkDB will be messing around with semaphores (or monitors aka condition variables) but for most programs there are far better ways to organise concurrency. Java recognises this -- experience showed the synchronized (monitor) approach to concurrency to be too unwieldy and it was superseded fairly quickly by java.util.concurrent and friends. Way back in 2000 we were using Doug Lea's concurrency library, which formed the basis for java.util.concurrent. I certainly could use semaphores but it would certainly take me some time to adjust my thinking to that primitive model.