lock_guard
if you need to lock exactly 1 mutex for an entire scope.scoped_lock
if you need to lock a number of mutexes that is not exactly 1.unique_lock
if you need to unlock within the scope of the block (which includes use with acondition_variable
).