非同期キーベースのロックによる同時オブジェクト アクセスの改善
この記事では、ImageProcessor ライブラリ内のハッシュされた URL キーを使用した同時オブジェクト ロックに取り組みます。 ライブラリでは、キャッシュの更新中に断続的なファイル アクセス エラーが発生します。 非同期キーベースのロック用に設計されたカスタム AsyncDuplicateLock
クラスでは不十分であることが判明しました。
AsyncDuplicateLock
クラスの分析
AsyncDuplicateLock
クラスは、同期 (Lock
) および非同期 (LockAsync
) のロック メソッドを提供します。どちらもキーを使用してロックされたオブジェクトを識別します。
ロック機構
ロックプロセスには、次のキーベースの手順が含まれます:
Wait
(同期) または WaitAsync
(非同期) が呼び出され、ロックが取得されます。Release
(同期) または非同期を使用して解放されます。問題の特定
元のコードの欠陥は、SemaphoreSlim
から ConcurrentDictionary
インスタンスを途中で削除することにあります。 セマフォの解放前にこの時期尚早に破棄すると、複数のセマフォが同じキーに関連付けられ、キャッシュ追加エラーが発生します。
実装の強化
私たちのソリューションでは、ディクショナリ内の各セマフォの参照カウントを導入します。 単一のロックにより、アトミックなデクリメントと参照カウントの削除が保証されます。この強化されたアプローチにより、堅牢なロックが提供され、以前のエラーが防止されます。
この改善された実装により、信頼性の高い非同期キーベースのロックが可能になり、キャッシュ エラーが最小限に抑えられ、ImageProcessor ライブラリが正しく機能することが保証されます。
以上が非同期キーベースのロックによりオブジェクトへの同時アクセスが向上し、キャッシュ エラーを防ぐにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。