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;
您必须为两者使用相同的互斥锁。两个互斥锁和根本没有互斥锁一样无用——你仍然会在 Get
和 Set
之间进行数据竞争。
我有 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;
您必须为两者使用相同的互斥锁。两个互斥锁和根本没有互斥锁一样无用——你仍然会在 Get
和 Set
之间进行数据竞争。