实现两级锁定

时间:2011-09-08 09:16:29

标签: c++ locking

我已经写了一个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!

1 个答案:

答案 0 :(得分:0)

您是否希望人们在ProcessData运行时能够写入数据?或者,在ProcessData完成之前,编写的人是否应该被阻止?

如果是,那么您可以导出2个让ProcessData锁定任何编写器的函数。

LockOutWriters() { // lock }
WriteData() { // blocks if above is locked }
UnLockWriters() { // unlock }

如果不是,那么您需要在调用GetData()时获取数据的快照,并确保每当ProcessData调用GetData时,它都会从该快照中提取数据。