私はそんなことはないと信じています。
その理由は、複数のスレッドが異なるコアで実行される場合にのみ、複数のスレッドを真に並列で実行できるからです。実際、マルチコア プロセッサが登場するまでは、異なるスレッドをまったく同時に実行 (計算) することは技術的に不可能でした。
現代のOSは大量のプロセスを使用するため、スレッドを使用します(少なくともプロセスごとに、スレッドはプロセスの「作業」部分です)。マルチコア プロセッサにもかかわらず、すべての一般的な使用法では、使用可能なコアよりも多くのスレッドがシステム上でアクティブになっています。
これらの行を書いているとき、「たった」8 つの使用可能なコアに対して 357 のスレッドがアクティブになっています。
それがスケジューラの使用目的です。スタベーションを回避し、同時実行の錯覚を与えるために、異なるスレッド間で利用可能な計算時間を共有します。
異なるスレッドが同時に実行され、時々上書きされないことを保証するには、OS のスケジューラを変更する必要があります。これは、可能であれば、少なくとも悪い考えです。
インタープリターの使用は、マルチスレッドアプリケーションを実行する唯一の方法は、同じ問題を持つインタープリタースレッドを作成することであるため、役に立ちません。
異なるスレッドが同期されていることを確認するには、バリアまたはセマフォを使用する必要があります。これは、ユーザーのコンピューターの OS のスケジューラを変更できないためです。
注: HPC アプリケーションでは、研究者はコンテキスト スイッチ (スレッドが実行されている環境を保存して後で復元する操作) で時間を無駄にしないようにします。したがって、利用可能なコアに応じてスレッドを割り当て (通常、OS と I/O 用に 1 つのコアを残します)、他のスレッドを特定のコアに固定します。これは、計算が可能な限り効率的に行われることを保証するのに役立ちます。
ただし、これは同期を保証するものではなく、バリアのような特定のメカニズムの使用が依然として必要になる場合があります。