Назад к вопросамГде вызов
JuniorТеорияЧасто
Где вызов add(-1) освобождает мьютекс m, если вообще освобождает?
#include <mutex>
std::mutex m;
int total = 0;
void add(int x) {
std::lock_guard<std::mutex> guard(m);
if (x < 0) {
return;
}
total += x;
}На return;: там guard выходит из области видимости, и вызывается его деструктор
- Ждать, что
return;пропустит освобождение: деструкторguardвыполняется при любом выходе из области видимости, в том числе при раннемreturn. - Ждать, что
m.unlock()нужно вызвать вручную:mосвобождает деструкторlock_guard, ради этого его и используют.
- Чем
lock_guardнадёжнее ручных вызововm.lock()иm.unlock()? - Как удерживать
mзахваченным только на части функции?