2

複数のスレッドが単一のセマフォで待機できますか? はいの場合、セマフォがダウンすると、どちらが再開されますか?

4

3 に答える 3

2

ドキュメントsem_post示唆するように、

この操作の結果のセマフォの値が 0 の場合、セマフォを待ってブロックされたスレッドの 1 つが への呼び出しから正常に戻ることが許可されsem_wait()ます。シンボル_POSIX_PRIORITY_SCHEDULING が定義されている場合、ブロック解除されるスレッドは、ブロックされたスレッドに有効なスケジュール ポリシーとパラメーターに適した方法で選択されます。スケジューラSCHED_FIFOとの場合SCHED_RR、最も優先度の高い待機スレッドがブロック解除され、セマフォを待機してブロックされている最も優先度の高いスレッドが複数ある場合は、最も長く待機している最も優先度の高いスレッドがブロック解除されます。シンボル_POSIX_PRIORITY_SCHEDULINGが定義されていない場合、ブロックを解除するスレッドの選択は指定されていません。

また、「アプリケーションの使用法」sem_waitセクションで定義されているように、異なる優先度レベルのスレッドが関与する優先度逆転のケースが存在する可能性があります

于 2013-04-23T08:19:09.110 に答える
2
Can multiple threads wait on a single semaphore ?

はい。

If yes, upon semaphore down which one will be resumed ?

まさにその1つ。どちらが OS カーネルの実装に依存するか: 待機中のスレッドを保持するために使用されるコンテナーの種類。これは FIFO キューである可能性が非常に高いため、semaphore.wait() を呼び出す最初のスレッドが最初に解放されますが、この動作に依存する方法でアプリを設計しないでください。

于 2013-04-23T09:15:54.563 に答える
0

これは、その特定の CPU サイクルで実行するようにスケジュールされたスレッドになります。

于 2013-04-23T08:01:57.983 に答える