CppCoreGuidelines CP.44 给 lock_guard, unique_lock 声明变量
07 July 2023
“Remember to name your lock_guard s and unique_lock s”
理由
例子
// global mutexes mutex m1; mutex m2; void f() { unique_lock<mutex>(m1); // (A) lock_guard<mutex> {m2}; // (B) // do work in critical section ... }
看起来很正常。但是是不对的。在 (A) 处, m1 是默认构造的局部
unique_lock ,它会遮盖掉全局的 ::m1 这样也就不会锁住 ::m1 。在 (B) 处,构造了一个匿名的临时 lock_guard 并且锁住 ::m2 ,但是立即走出了作用域范围,马上释放了 ::m2 。对于 f() 函数的其他部分来说,并没有锁住任何互斥锁。
强化
标记所有匿名的 lock_guard 和 unique_lock