これは、どの開発プラットフォームでも発生する可能性がある状況について語っているため、プログラミング言語にとらわれない質問です。
- 経過時間に基づいて有効期限が切れる方法でキャッシュされたリソースがあると想像してみましょう。
- そのリソースは、マルチスレッド環境でアクセスされます。
- 定期的にリソースが期限切れになり、1 つのスレッドだけがキャッシュを再生成するようにします。他のスレッドは待機して、最初のスレッドが取得したリソースを返す必要があります。
- オーバーヘッドを削減するために、リソースの有効期限が切れたときにのみリソース ロックを実行し、ロックのないキャッシュ読み取りを許可します。
この種の状況を処理するための共通の設計パターンがあるかどうか疑問に思っていますか?
問題を解決するための私の擬似コードの試みは次のとおりです。
// check for resource. If it exists return it.
if(inCache()) {
return getCachedResource();
}
// resource has expired, sychronize users so only
// one executes the following block at a time
lock {
// check if a previous request re-cached the resource
if (inCache()) {
return getCachedResource();
}
// get the resource
getResource();
return getCachedResource();
}
この問題を解決するより良い方法はありますか? 私が考慮していなかった可能性のある追加の懸念事項はありますか?