私は C# で作成したアプリケーションを持っていますが、ここでは同様の言語が適用されます。
アプリケーションには、さまざまな UDP および TCP ソケットを介して受信したデータに基づいて、フォーム上のウィンドウにリアルタイムでグラフィック シーンを描画するジョブがあります。UDP および TCP 接続はそれぞれ独自のスレッドを使用します。これらのスレッドはそれぞれ、メモリ内のさまざまなオブジェクトを変更し、それによってグラフィック表示が変更されます。また、ユーザー イベント (ボタンのクリックなど) を受け取ることができるユーザー インターフェイス スレッドもあり、それらの同じオブジェクトと表示が変更されます。最後に、同じオブジェクトと表示を変更する独自のスレッドを起動する多くのタイマーも起動します。
変更されているメモリ内のオブジェクトは、約 15 の異なるクラスで構成されています。
すべてがかなり確実に機能しますが、さまざまなクラスがさまざまなスレッドによって変更されるため、多くの同期ロックを追加する必要がありました。どのメモリが複数のスレッドによって変更される可能性があるかを判断するために、各クラスを個別に調べる必要がありました。
この状況では、これらのスポットの 1 つを見逃すのは非常に簡単に思えます: 必要な場所に同期を追加するのを忘れてしまうのです。
他の人が私が行った方法でこれを実装するかどうか、またはもっとエレガントな方法があるかどうかについて興味があります。おそらく、クラス A のすべての変更を独自のスレッドまたは何かに配置するのでしょうか?
(追記: 最初はうまくいかなかったので、ここで質問するのはとても怖いです。しかし、ここでの私の質問はあまり明白ではないと思うので、あなたもそうしないことを願っています。;o )