2017-06-02 23 views
0

私は、PCがマルチコアを持っているとします。 3つの異なるコアで動作する3つのスレッドがあります。スレッド(T1)がコア(C1)でスピンロック(S)を取得し、T1によって取得ロックを取得し、コアC2で実行中の同じT2およびT3スレッドとロックの取得を待機します。 T1スレッドがロックを解放すると、どのスレッドがT2またはT3のいずれかのロックを取得しますか?私はT2とT3の優先順位を同じにしていると同時に、異なるコアで同時に待っています。Linuxでスピンロックを取得する

+0

それに使用される戦略に応じて。ラウンドロビンは最も単純なものです。 – 0andriy

答えて

2

linuxカーネルはMCSスピンロックを使用します。要点は、ウェイターが自分自身をキューに追加することです。しかし、これを行うスレッドが2つある場合、最初に誰が成功するかについての保証はありません。

同様に、コードが単に「取られた」ビットを反転しようとするより単純なスピンロックでは、何も保証されません。ただし、特定のハードウェア特性によって、特定のコアが他のコアより簡単な時間を持つようにすることができます(同じソケットを共有する場合)。あなたはhttps://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html

を読みたい

私は繰り返し:2つの異なるスレッドがロックを競うならば、彼らはそれを取ると1を探していることは、そもそも間違っているであろうに何の保証順序はありません。

関連する問題