boost :: scoped_lock разблокировать - PullRequest
0 голосов
/ 11 января 2011

Могу ли я разблокировать мьютекс раньше, выходящий за рамки scoped_lock? Как я мог это сделать?

{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 ]

16 голосов
/ 11 января 2011

Да.

Используйте метод 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
6 голосов
/ 11 января 2011

Да; просто используйте функцию-член .unlock ().

2 голосов
/ 11 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...