Ответ 1
scoped_lock
является unique_lock
. В mutex.hpp:
typedef unique_lock<mutex> scoped_lock;
Деструктор вызывает unlock()
, если блокировка была получена. Таким образом, он будет выпущен, когда он выходит за рамки.
См. http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html
не только обеспечивает блокировку в стиле RAII, но также позволяет отложить получение блокировки до тех пор, пока функция элемента lock() не будет вызвана явно или не попытается получить блокировку неблокирующим образом или с тайм-аутом, Следовательно, unlock() вызывается только в деструкторе, если объект блокировки заблокировал объект Lockable или иным образом принял блокировку объекта Lockable.