ですから、これは本当に簡単な質問です。競合状態を防ぐためにセマフォを使用しようとしています。マニュアルページを読んでみましたが、本当に紛らわしいです。誰かがそれらがどのように機能するかを簡単に説明できますか?
2 に答える
Linux/Unix で使用していると仮定します。セマフォは、複数のスレッドから共有リソース (たとえば、グローバル変数) へのアクセスを制御/制限するために使用されます。1 つのスレッドがセマフォを取得し、値を変更して解放することができます。別のスレッドが変数にアクセスしようとすると、セマフォを取得する必要があります。既に取得されている場合は保留され、前のスレッドが制御を放棄した後にアクセスを取得します。
このように、セマフォは操作の順序付けと変数の整合性に使用されます。
セマフォは、あるスレッドから別のスレッドにイベントを通知するためにも使用されます。Mutex はセマフォの変形であり、同じスレッドがそれを取得して解放します (クリティカル セクションまたは競合状態を保護するため)。
以下の詳細を読む
https://www.sao.ru/hq/sts/linux/doc/ipc_guide/semaphores.html
私は現在、システム II のクラスでこのトピックに取り組んでおり、基本的にプログラミングに C 言語を使用しています。私のインストラクターが説明してくれたように、セマフォは非負の整数同期変数であり、特定のスレッド機能をチェックするのに本質的に役立ちます。これは、コード内でスレッドを規制し続けようとする pthread_mutex 関数のように機能します...うーん、ややあいまいであることは知っていますが、特に比較的小さなバッファーを利用する場合、オールインオールセマフォはスレッドアクティビティを規制するために使用されます. これ以上混乱しないことを願っています (0_0)。
私が意味することのいくつかの例:
– セマフォ: 非負の整数同期変数。
• sem_wait(s): [ while(s==0) wait(); s--; ] – 元の名前は P()、オランダ語で「Proberen」(テスト)
• sem_post(s): [ s++; ]
– 元の名前は V()、オランダ語で「Verhogen」 (インクリメント)
– OS は、括弧 [ ] 内の操作が不可分に実行されることを保証します。
クレジット/引用: Dr. Phillips, Joseph, DePaul University, Lecture (2014)