lock_guard 两个临界区和一个互斥量

lock_guard two critical sections with one mutex

我有 Get()Set() 方法,我想让它们线程安全。想知道我是否应该使用两个互斥锁,一个用于 Get,另一个用于 Set,或者我可以使用一个互斥锁,如下面的代码所示。

public:
float Get(string name){
  lock_guard<mutex> lock(mutex1);
  return value_map[name];
}

Set(string name, float value){
  lock_guard<mutex> lock(mutex1);
  value_map[name] = value;
}

private:
map<string, float> value_map;
mutex mutex1;

您必须为两者使用相同的互斥锁。两个互斥锁和根本没有互斥锁一样无用——你仍然会在 GetSet 之间进行数据竞争。