Мьютекс не проблема;это замок.Самое простое решение - просто вызвать mutex::lock()
и mutex::unlock()
вручную и забыть о mutex::scoped_lock
;в конце концов, вы не хотите, чтобы замок соблюдал область видимости.Проблема с этим является обычной;Вы, вероятно, хотите освободить блокировку в случае исключения.Одним из решений будет динамическое выделение mutex::scoped_lock
и использование std::auto_ptr
или boost::shared_ptr
для управления им.(Как ни странно, ни boost::mutex::scoped_lock
, ни std::lock_guard
не являются подвижными, поэтому для передачи права собственности требуется динамическое распределение.)