セマフォの機能を拡張しています。実際のセマフォーの実装が分からず、コードが正しく実行されていることを認識したときに、私はロードブロッキングに遭遇しました。私はこれを知る必要がありました。セマフォキュー
セマフォーは、sem_wait()を呼び出すときに待機しているスレッドをブロックし、別のスレッドが現在ロックしているスレッドをブロックすることがわかっています。スレッドはブロックされ、そのセマフォの待機リストに入れられます。
私の質問は、sem_post()で何が起きるかに関するものです。次のスレッドが待機中のリストから引き出され、ロックスレッドとして設定され、ブロック解除されていますか?または、全く異なる投稿を送信するスキームですか?
ありがとうございます!
P()
セマフォを解放するには(あなたがこのsem_wait
を呼び出すように見える)V()
をセマフォを取得する(あなたはこのsem_post
を呼び出すように見える)
:
一度に1つのスレッドしか通過できない場合、どのくらい正確に待ち行列がセマフォに対して機能するかを知ることは可能ですか? – user82229
セマフォは注文を保証しません。キューやその他のFIFO構造を実際に使用する必要はありません。一度に1つのスレッドのみが許可されているときにV()を呼び出すと、別の(おそらくランダムな)スレッドがそのP()呼び出しから戻り、続行します。 –
@Ben S:あなたの一部の人にそのコメントをお伝えしてみませんか?私はそれが最初にheluimwhippetが後になったものだと思うし、それはよく述べられている。 – dmckee