2011-01-11 3 views
-1

Мог ли я разблокировать мьютексы перед выходом scoped_lock? Как я мог это сделать?boost :: scoped_lock unlock

{boost::mutex::scoped_lock lock(mutex); 

if(conditionaA) 
{ 
    if(conditionB) 
    { 
    //could I unlock here as I don't want to hold the lock too long. 
    //perform calculation 
    } 

} 
else 
{ 

} 

}//lock scope 

Спасибо.

+3

Оцените, не прочитав документацию, я бы удвоил ставку, потому что Google покажет решение в качестве первого результата для «scoped_lock unlock», тройная ставка вниз, потому что метод разблокировки называется разблокировкой. –

+0

Чистая лень, задающая этот вопрос на SO. -1. –

ответ

15

Да.

Используйте метод unlock().

{boost::mutex::scoped_lock lock(mutex); 

if(conditionaA) 
{ 
    if(conditionB) 
    { 
    //could I unlock here as I don't want to hold the lock too long. 
    lock.unlock(); // <-- 
    } 

    //perform calculation 

} 
else 
{ 

} 

}//lock scope 
1

boost::mutex::scoped_lock такая же, как boost::unique_lock<mutex> и вы можете открыть их. Он должен быть заблокирован вашим потоком, чтобы сделать это, или вы получите исключение.

Деструктор unique_lock гарантирует, что мьютекс разблокирован во время уничтожения, поэтому целью использования объекта блокировки является обеспечение этого (безопасность исключений), если исключение вызывается в любой момент блокировки.

Смежные вопросы