Dej*_*jwi 4 c++ concurrency mutex c++11
让我们考虑一下C++中的这样一个类:
class CuteClass
{
public:
int getFancyInt() const;
float getNiceFloat() const;
string getPerfectString() const;
void setIntSomething(int something);
void setInternalState(State newState);
};
Run Code Online (Sandbox Code Playgroud)
可以从几个不同的线程同时访问此类的实例.然后:
所有getMethods(getFancyInt,getNiceFloat,getPerfectString)都不应该相互阻塞.它们不会更改对象的内部状态.
所有setMethod(setIntSomething,setInternalState)都应该:
带有互斥锁的简单lock_guard将满足除一个之外的所有要求 - getMethod将阻止其他getMethods.
在这种情况下,什么解决方案容易和干净?
小智 6
您正在寻找的是R/W互斥体.
你在所有的getter中将其锁定为"READ",并在所有setter中将其"WRITE"锁定.
Boost shared_mutex正是您所寻找的
boost shared_mutex的示例(多次读取/一次写入)?
为了与"const"声明兼容,您需要将互斥锁本身声明为可变的
std::atomic应该解决对部分更改数据的任何担忧。
[编辑:]不,事实并非如此。如果我不删除这个错误答案,那只是为了保留应该保留的富有洞察力的评论。
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |