複数のスレッド間で共有される辞書があります。すべてのスレッドは、指定されたキーに従ってディクショナリから特定の値を読み取りますが、キーがディクショナリに存在しない場合、スレッドはそれをディクショナリに追加する必要があります。
同期の問題を解決するために、基本的にリーダーとライターのロック同期を提供する ReaderWriterLockSlim クラスを使用します (つまり、リーダーは並行して実行できますが、一度に 1 つのライターしか実行できません...) が、リーダーのアップグレード オプションを追加します。アップグレード オプションを使用すると、特定のキーが既にディクショナリにあるかどうかをテストできます。そうでない場合は、ロックをアップグレードして書き込み、キーごとに 1 つの追加のみを約束します。
私の問題は、一度に 2 つのアップグレード可能なロックを作成できないことです。つまり、この解決策は役に立ちません... :(
Microsoft がアップグレード可能なロックをこのように実装することを選択した理由 (一度に複数のアップグレード可能なロックを使用することはできません...) を説明してください。また、アップグレード可能なロックを自分で実装する方法を教えてください共有辞書を同期する別のアイデアはありますか?