スピンロックとセマフォの違いは何ですか?

スピンロックとセマフォの違いは何ですか?

スピンロックとセマフォの基本的な動作上の違いは何ですか?

ベストアンサー1

どちらも制限されたリソースを管理します。まず、バイナリセマフォ(ミューテックスロック)とスピンロックの違いを説明します。

スピンロック忙しい待機が行われます。つまり、ループを実行し続けます。

while (try_acquire_resource ());
...
release();

これは非常に軽いロック/ロック解除を実行しますが、同じリソースにアクセスしようとしている他のスレッドがロックスレッドを先取りする場合、2番目のスレッドはCPUクォータが不足するまでリソースを取得しようとします。

一方、ミューテックス次のように振る舞います。

if (!try_lock()) {
    add_to_waiting_queue ();
    wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();   

したがって、スレッドがブロックされたリソースを取得しようとすると、そのスレッドは使用可能になるまで一時停止されます。ロック/ロック解除ははるかに面倒ですが、待ち時間は「無料」で「プロセス」です。

シグナル複数の使用を許可するロックです(初期化からわかります)。たとえば、3つのスレッドが同時にリソースを保持できますが、それ以上は許可されません。たとえば、通常は生産者/消費者の問題やキューに使用されます。

P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)

おすすめ記事