我有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;
答案 0 :(得分:2)
两个都必须使用相同的互斥量。两个互斥锁根本没有互斥锁一样没用-您仍然在Get
和Set
之间进行数据竞争。