Unique_lock разблокируется при вызове функции? - PullRequest
1 голос
/ 28 марта 2019

Допустим, у меня есть такая ситуация:

void consumer(){
   unique_lock<mutex> lock(mtx);
   foo();  
}

void foo(){
    /* does the thread still own the mutex here? */
}

Я ожидаю, что это так, но я не уверен на 100%.

1 Ответ

6 голосов
/ 28 марта 2019

Деструктор unique_lock вызывает mtx.unlock(). Деструктор вызывается в конце срока службы замка. Как правило (см. Комментарии), конец срока службы блокировки:

void consumer(){
   unique_lock<mutex> lock(mtx);
   foo();  
} // <- here.

Так что да, он все еще будет заблокирован.

...