私はC#プログラミングをかなり言語に合わせて調べています。オブジェクト指向プログラミング全般と、複数のスレッドを実行することの意味を大まかに理解していると思いますが、実際の実装はスクラブと同じです。
私が探しているのは、多くのスレッドが独立して実行され、相互作用するツールを作成することです。各スレッドは独自のタスクを実行し、他のスレッドを呼び出すことができます。
(異なるスレッドから同時に発生する複数の更新で何も失わずに)通信を確保するための私の戦略は、外部と呼ぶことができるタスクのようなスプールを作成し、特定のスレッドにタスクを追加するか、これらのサービスをスプールすることです。これをクラスに配置するか外部に配置して、クラス自体に新しいタスクのためにスプールを呼び出しさせ、スプールを追跡させるべきかがわかりません。ここでは特に、空のスプールがタスクを取得した場合にクラスに通知する方法を検討しています(リスナーのアプローチなので、新しいものが到着した場合にタスクを目覚めさせたい場合は、タスクがプールにサブスクライブできます)。タスクの数と次のタスクはスケジュールされていません」アプローチ
これを作成するための良い戦略は何でしょうか。実際のクラスで作成する必要がありますか、それとも外部で作成する必要がありますか?「ビジーウェイトチェック」では、新しいジョブの追加と実際のスプールでのジョブの削除のみが可能であり、シグナリングではジョブの追加と削除の両方が必要になるだけでなく、スリープ状態になるため、実装の重要な領域は何ですか。シグナリングがクリティカルになると、クリティカル領域に入った場合にどうするかというスプールの要件が突然高くなります。これにより、ブロックが発生し、他のブロックが発生し、予期しないデッドロックが発生する可能性があります。