Condition variable is also invaluable to sharing h/w resources among many threads,
 it allows thread to yeild when signal waiting thread, which guarantee more fair use of i/o hardware
 and responsiveness