why condition variable requires unique_lock
A unique_lock can be created without immediately locking, can unlock at any point in its existence, and can transfer ownership of the lock from one instance to another. So you always use lock_guard, unless you need the capabilities of unique_lock. A condition_variable needs a unique_lock.