わかりましたので、同期について読んでいます。競合状態を回避するために、スピンロック、セマフォ、ミューテックスなどのさまざまなアルゴリズムを読みました。
ただし、これらのアルゴリズムでは、複数のプロセスがまったく同時にデータにアクセスする場合、SMP の競合状態を防ぐことはできません。
たとえば、プロセッサ A のスレッド 1 が lock(mutex1); を実行するとします。撤回(1000); ロックを解除 (mutex1);
プロセッサ B のスレッド 2 は lock(mutex1) を実行します。預金(1000); 預金(1000); ロックを解除 (mutex1);
両方のスレッドが正確に同時に実行される場合、両方のスレッドが同時にクリティカル セクションになります。
唯一の解決策 (ハードウェア レベルである必要があります) は、各プロセッサを互いに少しずらして実行することですが、並列処理の目的を無効にします。
複数のプロセッサがまったく同時にロックを取得しようとする状況を回避するためのハードウェア レベルのサポートはありますか?
(これはアトミック性の問題ではなく、正確な並列性の問題であり、SMP がそれをどのように処理するのか疑問に思います)。