04/08/12 14:21.net
同期トークン
同期トークンはいくつものスレッドが同時につかめます。トークンをつかんでいる
スレッドは、同一のトークンをつかんでいる他のスレッドが同時には実行しない
ことが保証されます。
一つのスレッドは同期トークンをいくつでもつかむことができます。
あるスレッドは、イールドまたはブロック条件を通じて同期トークンを
つかむことがありますが、そのスレッドが(ブロックあるいはイールドされて)
実行中でない間、それらのトークンをつかんでいる他のスレッドが実行する
可能性があることを考慮に入れる必要があります。
理論上、同期トークンの機構から起きるデッドロック状態で解決できないものは
ありません。しかし、初期の実装ではトークンを同時につかんだ場合にライブロック
の問題が起きる可能性があります。
同期トークンは、同一のトークンをつかもうとする割り込みが他のスレッドを
プリエンプトしてしまうことから保護するのにも使われます。これはBig Giant Lock
(BGL; MPロックともいう)とは若干違った作用があります。BGLは同一CPUの割り込みを
インターロックすることはありません。重要なことは、プリエンプションによって
一時的に他のスレッドへのスイッチが起きることがあるとしても、トークンの原子性
(?atomicity)プリエンプティブ条件によって維持されるということです。トークンの
原子性(?atomicity)を維持するためにspl()レベルやクリティカルセクションに入る
必要はありません。
同期トークンはプリエンプティブは割り込みが起きるのをさまたげることはありません
が、割込みをブロックして再スケジュールさせることがあります。スレッド化されて
いない高速割り込みやIPIメッセージング割り込みはトークンをつかうことが
できません。それは処理に必要なスレッドコンテキストを持っていないからです。
そのかわり、これらのサブシステムはクリティカルセクションを使うことで
排他制御をします。