A unique_lock
охранник может использоваться вместо lock_guard
. unique_lock
дает вам те же гарантии RAII, что и lock_guard
(вызывает lock()
при создании lock_guard и unlock()
при уничтожении), а также предоставляет lock()
и unlock()
, чтобы позволить вам блокировать и разблокировать себя .
С unique_lock
вы можете lock()
до критического пути и unlock()
сразу после.
unique_lock
будет вызывать unlock()
в деструкторе только при блокировке был приобретен ранее, поэтому нет риска снять блокировку дважды (что приводит к неопределенному поведению).