CppCoreGuidelines CP.50 互斥锁与其保护的数据同时定义,尽可能用 synchronized_value
08 July 2023
“Define a mutex
together with the data it guards. Use synchronized_value<T>
where possible”
理由
这样别人就很容易知道互斥锁要保护的数据是哪些。避免锁住错误的互斥锁,或没锁要锁的互斥锁。
synchronized_value<T>
可以保证数据带有一个互斥锁,并且在数据访问的时候,互斥锁正确的被锁住。
例子
struct Record { std::mutex m; // take this mutex before accessing other members // ... }; class MyClass { struct DataRecord { // ... }; synchronized_value<DataRecord> data; // Protect the data with a mutex };