用一个互斥锁lock_guard两个关键部分

时间:2019-01-03 01:36:32

标签: multithreading c++11 dictionary thread-safety locking

我有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;

1 个答案:

答案 0 :(得分:2)

两个都必须使用相同的互斥量。两个互斥锁根本没有互斥锁一样没用-您仍然在GetSet之间进行数据竞争。