3

Stackoverflow でこのトピックに関する投稿を読みましたが、要点を理解できませんでした。たぶん、それらの違いを特定の例に限定することができます.

鍵付きのトイレがあります。Mutex: 1 つのスレッドがキーを受け取ります。他のスレッドがトイレに入る必要がある場合、それらは待機します。現在の所有者が出てきて、警備員(OSカーネル)に鍵を渡し、警備員はトイレの所有権を別の人に渡します。

問題の説明: 共有リソースは、それをロックしたスレッド内の同じミューテックスによってロック解除されなければならないことに、すべての人が同意しているようです。ただし、バイナリ セマフォの場合は、他のスレッドでもロックを解除できます。ここで、セマフォの実装を検討してください。

最初の人がトイレに到着し、wait ステートメントを実行すると、セマフォ構造の値が 1 から 0 になります。他の人 (他のスレッド) が来て、wait ステートメントを実行すると、「値 = 0」であるためブロックされます。 . では、他のスレッドがクリティカル セクションに入ることができないときに、他のスレッドが特別にトイレ/クリティカル セクションのロックを解除できると常に言われているのはなぜですか?

4

3 に答える 3

0

バイナリ セマフォは通常のセマフォであり、0 (リソースが利用できない) または 1 (リソースが利用できる) の値のみを持つことができます。これとミューテックス (ロック) の間に違いはありません。

プロセスがトイレに入った後、セマフォはデクリメントされ、セマフォを待っている他の人はクリティカルセクションに入るのをブロックされます。ブロックされたプロセス/スレッド/その他のものは通常、ある種のキューに保持されます。プロセスがトイレを出ると、待機中の最初のプロセスが起動されます。

セマフォが 0 のときにスレッドがクリティカル セクションのロックを解除できるとどこで読んだかわかりません。

(注、実装の違いがある可能性があります)

于 2013-07-03T17:04:39.910 に答える
-1

バイナリ セマフォとミューテックスの間に違いはまったくありません。

これらの概念上の唯一の違いは、mutex は 1 つのキーのみを表すことができるのに対し、セマフォは複数の (番号付きの) キーを表すことができるということです。

この例を見てください。

トイレは以下の5つです。

セマフォを要求すると、特定のトイレへのキーが取得されます。そのトイレを出ると、残りの無料のトイレが並んでいます。

すべてのトイレが満杯の場合、誰も入ることができません。

これをミューテックスで解決する場合、ミューテックスはキーボックスを保護し、キーが使用可能かどうかを継続的に確認する必要がありますが、セマフォはキーセットを表すことができます。

于 2013-07-03T17:07:58.003 に答える