Condition variables.  Threading libraries often provide condition variables, which
      	  are sort of like monitor condition variables.  C++-11:
	// Condition variables use a mutex, which stands in for the
	// mutual exclusion provided by a monitor.
	mutex mux;
	condition_variable available;
	...
	// To wait for the resource to be available
	unique_lock<mutex> locker(mux);	// Locks the mutex.
	available.wait(locker);
	// Unlocks the mutex, then the caller sleeps until awoken.
	// Before being awoken, the mutex is locked again.
	...
	// To indicate that the resource is available, another thread does:
	available.notify_one();
	// or
	available.notify_all();