大規模でかなり複雑な (複数のドキュメント) XML 構造の読み取りと編集に基づく GUI アプリケーションを作成しています。GUI 自体は主にデータ バインディングに基づいているため、XML とのやり取りのほとんどは、内部で LINQ to XML を使用するオブジェクト ベースのモデルを介して UI スレッドで行われますが、一部の操作 (検索やローディング) はバックグラウンド スレッドで実行する必要があるため、この XML にスレッド セーフな方法でアクセスしていることを確認する必要があります。
XMLのすべての編集がスレッドセーフであることを確認するのは簡単です(たとえば、グローバルロックを使用するか、UIスレッドですべての編集を実行することにより)が、XObjectのドキュメントに次のように記載されていることに気付きました
この型の public static メンバーはすべてスレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。
つまり、アプリケーションで使用されるすべてのインスタンスへのすべてのアクセスを同期する必要があります。残念ながら、私のオブジェクト モデルの動作方法のせいで、モデル内の任意のオブジェクトの最大 1 つのインスタンスが特定の にアクセスできるようにすることは困難です。つまり、プライベート オブジェクトをロックしてスレッド セーフを確保することはできません (通常、デッドロックを防ぐためのベスト プラクティス)。 XObject
XObject
このシナリオではXObject
、スレッドセーフのためにそれ自体で直接ロックを使用することは受け入れられますか、それとも代替手段はありますか?