コメントにしたいのですが、文字数が多すぎます。とにかく、ozgurがコメントレスポンスの質問で判断すると、私のスレッドの実行にこれほど長い時間がかかるとは言えず、OSのおかげで他のスレッドと魔法のように連動すると期待できないという点が欠けているようです。スレッドを設計し、最悪の場合のパフォーマンスについてそれらを分析する必要があります。最悪のケースが要件を満たさない場合は、スレッドを再設計する必要があります。
したがって、スレッド1が完了するまでに10ミリ秒かかり、スレッド2が20ミリ秒かかると言うのではなく、スレッド1は15ミリ秒ごとに実行する必要があるとも言う必要があります。スレッド2は40ミリ秒ごとに実行する必要があります。スレッド3は500ミリ秒ごとに実行する必要があり、スレッドNは1500ミリ秒ごとに実行する必要があります。次に、最悪のシナリオで各スレッドが完了するまでにかかる時間に時間を割り当てます。これらすべてを組み合わせて、考えられる最悪のシナリオを特定し、すべてのスレッドがそのタイミング要件を満たしていることを確認する必要があります。この分析では、タイミング要件を満たすために、一部のスレッドを他のスレッドよりも高い優先度にする必要があるかどうかを特定します。
たとえば、スレッド5が実行されている場合、スレッド4によって中断されます。スレッド4はスレッド3によって中断され、スレッド3はスレッドNによって中断されますが、これは最悪の場合のシナリオです。これらすべてをタイムラインに配置し、この最悪のシナリオでも、すべてのスレッドがそのタイミング要件を満たしていることを確認します。リアルタイムOSでスケジューラと優先度を使用することにより、スレッドがこのワーストケースのシナリオを確定的に完了するようにすることができます。その決定論は、リアルタイムOSを作るものです。
スレッドを同じ優先度にすると、スケジューラーは次に実行するスレッドを自由に選択できるため、その決定論の一部(すべてではないにしても)が失われます。
WindowsのようなOSでは、各スレッドがいつ実行されるかを指定できないだけでなく、アプリケーションがいつでも実行されることを保証することもできません。OSはアプリケーションを停止し、必要に応じてバックグラウンドサービスを実行する可能性があります。つまり、決定論はありません。したがって、WindowsはリアルタイムOSではありません。ただし、(thread1が10秒ごとに実行され、thread2が15秒ごとに実行される)のようにタイミング要件が大きい場合は、スロップを考慮している限り、Windowsを本質的にリアルタイムOSのように扱うことができます。 (与えるか、数百ミリ秒かかり、ときどきウィンドウが失われる)で十分です。