我已经写了一个dll来存储memroy中的一些信息,有很多线程需要 同时访问数据,所以我使用读/写锁来同步。我出口了 对用户有一些功能,在函数中,我需要锁定,然后获取数据,然后退出 并释放锁。例如,像这个函数。
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(数据)之间发生变化;和GetData(data2);但我的用户希望我的数据永远不会在ProcessData上更改,因为在这种情况下data1可能会转换为data2。 而且我不想在我的dll中暴露我的锁。 有没有办法实现这样的东西,Thx!
答案 0 :(得分:0)
您是否希望人们在ProcessData运行时能够写入数据?或者,在ProcessData完成之前,编写的人是否应该被阻止?
如果是,那么您可以导出2个让ProcessData锁定任何编写器的函数。
LockOutWriters() { // lock }
WriteData() { // blocks if above is locked }
UnLockWriters() { // unlock }
如果不是,那么您需要在调用GetData()时获取数据的快照,并确保每当ProcessData调用GetData时,它都会从该快照中提取数据。