これはおそらくばかげた質問ですが、次の疑似コードを検討してください。
struct Person {
std::string name;
};
class Registry {
public:
const std::string& name(int id) const {return _people[id].name;}
void name(int id, const std::string& name) { [[scoped mutex]]; _people[id].name = name;}
private:
std::map<int, Person> _people;
};
この簡単な例では、レジストリが複数のスレッドによってアクセスされるシングルトンであると想定しています。データを変更する操作中はロックしていますが、非変更アクセス中はロックしていません。
このスレッドは安全ですか、それとも読み取り操作中にロックする必要がありますか?複数のスレッドが同時にデータを変更しようとするのを防いでいますが、あるスレッドが別のスレッドが書き込みを同時に読み取ろうとした場合にどうなるかわかりません。