24 June 2023

C++ 核心指南目录

“Use RAII, never plain lock()/unlock()”

理由

避免因为锁没释放导致的诡异问题。

坏例子

mutex mtx;

void do_stuff()
{
    mtx.lock();
    // ... do stuff ...
    mtx.unlock();
}

迟早的,会有人忘记那里有一个 mtx.unlock(), 然后在之前加一个 return 或在执行代码中抛出个异常,或者其他什么东西。

mutex mtx;

void do_stuff()
{
    unique_lock<mutex> lck {mtx};
    // ... do stuff ...
}

强化

标记调用 lock()unlock() 的代码。