Concurrency and parallelism
CP.20
Используйте RAII, никогда простых `lock()`/`unlock()`
Причина
Избегает неприятные ошибки от неосвобожденных блокировок.
Плохой пример
mutex mtx;
void do_stuff()
{
mtx.lock();
// ... do stuff ...
mtx.unlock();
}
Рано или поздно кто-то забудет mtx.unlock(), поместит return в ... do stuff ..., выбросит исключение или что-то еще.
mutex mtx;
void do_stuff()
{
unique_lock<mutex> lck {mtx};
// ... do stuff ...
}
Применение
Отметьте вызовы функции-члена lock() и unlock(). ???