これはシナリオです:
スレッド A はフランス語ですべての本を求めます
スレッド B はアラビア語ですべての本を求めます
スレッド A がロック領域にある場合、スレッド B はスレッド A が終了するのをロック領域の外で待機します。
スレッド B がデータを取得できるコード内の「場所」は 1 つしかないためです。
次のようなキャッシュ内のキーに基づいてロックを作成したい:
if(Cache["BooksInFrench"] == null)
{
lock("BooksInFrench")
{
if(Cache["BooksInFrench"] == null)
{
object d = GetFromDB();
cache["BooksInFrench"] = d;
}
}
BooksInArabic などについても同じです。このように、サイトへの接続が 200 あり、そのうちの 10 が BooksInFrench を要求した場合、残りの要求 (BooksInArabic、BooksInHebrew .......) を実行してデータを取得できます。彼らの要求はロック領域にないからです。
私の現在のコードは次のようになります: http://pastebin.com/LFhxgHDM
ダブルロックはあまり良くないと思います...他の解決策/改善点はありますか?