我有以下情况:
一个线程正在遍历类 X 的方法 A 中的列表数据结构。该数据结构是缓存。在任何时候,我们都可以调用 X 类中的方法 B,说我们的缓存已过期。在这种情况下,如果我们当前在函数 A 中,我们需要重新启动函数 A,因为对该数据结构的迭代可以让我们找到不再存在的数据。我们可以指望方法 B 不会同时被调用两次(方法 A 将有时间完成)。
这可能吗?我正在使用 C++。请注意,仅仅锁定缓存是不够的。如果我们锁定了缓存并且我们收到一个说缓存已过期的调用,我们需要立即重新启动函数 A 以获得正确的行为。
这将无法正常工作,但我将尝试展示我需要的内容:
Class X
{
Method A
{
for each //data structure
{
// do processing
// check if our cache is out of date
if(mRestart)
{
while(!mReadyToStart)
; //wait
mRestart = false;
mReadyToStart = false;
//Break, and call something that will recall this function.
}
else
return result; //return means we never needed to restart.
}
}
Method B
{
mRestart = true;
//Do processing
mReadyToRestart = true;
}
bool mRestart; // Init to false in constructor
}