08 July 2023

C++ 核心指南目录

“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
};