CppCoreGuidelines CP.20 用 RAII, 不要用基础的 lock()/unlock()
24 June 2023
“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()
的代码。