GNU/Linux >> Linux の 問題 >  >> Linux

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

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

承認された回答:

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

スピンロックはビジーウェイトを実行します。つまり、ループを実行し続けます:

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)

Linux
  1. ミューテックスとクリティカルセクションの違いは何ですか?

  2. Cのstrtok_rとstrtok_sの違いは何ですか?

  3. fsck と e2fsck の違いは何ですか?

  1. InnoDBとMyISAMの違いは何ですか?

  2. 「su -」と「su --login」の違いは何ですか?

  3. ルートとIPルートの違いは何ですか?

  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. Gitスイッチとチェックアウトの違いは何ですか?

  3. RedhatとcentOSの違いは何ですか?