实行两级锁
implement two level lock
本文关键字:两级 更新时间:2023-10-16
我写了一个dll来在内存中存储一些信息,有很多线程想要同时访问数据,所以我使用读/写锁来同步。然后导出有些函数给用户,在函数中,我需要锁,然后获取数据,然后退出然后松开锁。例如,像下面这个函数:
void GetData(data)
{
//require lock
//get data
//release lock
}
我的用户可能会多次调用GetData函数,例如
void ProcessData()
{
// do something 1
GetData(data1);
// do something 2
GetData(data2);
...
}
同时,其他线程可能通过调用我的dll的其他导出函数来改变我的dll中的数据,所以数据可能在GetData(data)之间发生变化;和GetData (data2);但是我的用户希望我的数据永远不会在ProcessData改变,因为在这种情况下data1可能与data2相关。我不想暴露dll中的锁。有没有办法实现这样的东西,谢谢! 您希望人们能够在ProcessData运行时写入数据吗?或者应该阻止写的人直到ProcessData完成?
如果是,那么你可以导出两个函数,让ProcessData锁定任何写入器。
LockOutWriters() { // lock }
WriteData() { // blocks if above is locked }
UnLockWriters() { // unlock }
如果没有,那么您需要在调用GetData()时获取数据快照,并确保每当ProcessData调用GetData时,它都会从该快照中提取数据。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 有根的二进制搜索树.保留与其父级的链接
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 表达式未评估为常数两个级别的constexpr函数(编译器错误?)
- 库期望平面命名空间中的符号,尽管使用两级命名空间编译
- 两个子级具有相同的 F() 实现,另外两个子级具有不同的 F 实现,所有四个子级都派生自同一类
- 优化非常大的两级深度迭代
- Systemc传输级建模从TLM_Generic_Payload提取两个整数
- 可修改的多集集:两级排序容器
- 在C++中使用两级模板时出现问题
- Qt - 堆栈上具有父级的 QObject 如何被删除两次?
- 如何使用两个管道在子级/父级之间发送消息
- 如何在具有相同父级的两个类之间共享代码
- 实行两级锁
- 仅对两个父级中的一个进行赋值操作符
- 两级层次类中的C++多态性:不明白为什么它不起作用