次のシナリオがあります。
1 つのスレッドが、クラス X のメソッド A のリスト データ構造を反復処理しています。そのデータ構造はキャッシュです。いつでも、クラス X のメソッド B が呼び出され、キャッシュが古くなっているというメッセージが表示されます。その場合、現在関数 A にいる場合は、関数 A を再起動する必要があります。これは、そのデータ構造の反復により、存在しなくなったデータを見つけることができるためです。メソッド B が同時に 2 回呼び出されることはありません (メソッド 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
}