質問: スピンロックとセマフォの違いは何ですか? 実際のスピンロックとセマフォの基本的な違いは何ですか?
回答: どちらも限られたリソースを管理します。まず、バイナリセマフォ(ミューテックス)とスピンロックの違いについて説明します。 スピンロック ビジー待機を実行します-つまり、ループを実行し続けます:while (try_acquire_resource ()); ... release(); これは非常に軽量なロック/ロック解除を実行しますが、同じリソースにアクセスしようとする他のスレッドがロックスレッドをプリエンプトする場合、2番目のスレッドはcpuクォンタムがなくなるまでリソースを無理にしようとします。一方、 mutex は次のように動作します。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)