私は、現在のスレッドがクリティカルセクションを完了したときに、ミューテックスとセマフォが待機中のプロセスのリストを保持し、それらを起動させることを読んでいます。ミューテックスとセマフォはどうしたらできますか?彼らはプロセススケジューラの決定に干渉しませんか?ミューテックスまたはセマフォーはどのようにプロセスを起動させますか?
1
A
答えて
5
スケジューラで待機中および起床は通常行われます。待機中のスレッドの特定の1つを強制的にウェイクさせるミューテックスの実装は、通常、実装が不良であるとみなされます。
代わりに、ミューテックスまたはセマフォは、スレッドが待機中であることをスケジューラに通知し、「実行準備」リストから取り除くことになります。そして、ミューテックスのロックが解除されているか、セマフォが合図、実装はすべてスケジューラに通知
スケジューラの判断で待機中のスレッドの1を覚ますために、スケジューラを頼むか、
しますか待機中のスレッドは実行準備が整っており、次に待機中のスレッドに論理を持たせることで、スケジューラが目を覚ます最初のスレッドを除くすべてのスレッドが再びスリープ状態に戻るようにします。
前者が好ましい実装選択であるが、必ずしも利用可能であるとは限らない。 2番目の方法はしばしば "雷の群れ"と呼ばれています.1000スレッドが待機している場合は、1000スレッドがすべて目覚め(大きな雷の群れ)、999回だけスリープ状態に戻ります。これはCPUリソースの無駄であり、実装は可能な限り回避します。
0
これは、実装に大きく依存します。これらのことについて言えば、私たちは通常、オペレーティングシステムをサポートしているスレッドを参照しているか、言語で完全に実装されているため、スレッドサポートのためにO/Sと対話していません。
これらはプロセスを参照することもできますが、これらの実装では通常、プロセス管理のO/Sサポートに加えて複雑なメッセージパッシングパターンが必要です。
0
はい、単純な説明は、待機条件が満たされるまで、待機プロセス(セマフォまたは入出力)がスケジューラの実行キューから削除されるという単純な説明です。
関連する問題
- 1. 私のアプリケーションはどのように起動しましたか?
- 2. セマフォーはどのようにネガを働かせるのですか?
- 3. Javaで起動されたプロセスからどのようにブロックを解除できますか?
- 4. プロセスに対応するセマフォー?
- 5. Silverlightでセマフォーはありませんか?
- 6. C#の - どのようにプロセスが正常に起動したかどうかを確認するために
- 7. アプリケーションは起動しません - どのようにデバッグするのですか?
- 8. シェルスクリプトenvsetup.shはどのように起動しますか?
- 9. IIS Expressはどのように起動しますか?
- 10. C - セマフォーがすべてのプロセスで共有されていません
- 11. 再起動時にglassfishを起動させるにはどうすればよいですか?
- 12. どのようにミューテックスが実際に機能しますか?
- 13. Javaで起動されたnoguiプロセスのコンソールウィンドウを作成するにはどうしたらいいですか?
- 14. プロセスはどのように終了しましたか?
- 15. サービスによって起動されたプロセスはメモリを割り当てることができません
- 16. ACEミューテックスはどのように機能し、ACEスレッドミューテックスは異なる動作をしますか?
- 17. プロセスを再起動せずにAzure WebロールでIISを再起動することはできますか?
- 18. Androidスタジオはどのようにガベージコレクタを起動し、どのように動作しますか?
- 19. 外部WPFプロセスやその他のプロセスが起動したかどうかを確認する方法は?
- 20. バックアップ中のファイルがプロセス中に更新された場合、rsyncはどのように動作しますか?
- 21. フォークされた10個の子プロセス、親プロセスはどのように戻り値を収集できますか?
- 22. コンピュータが再起動されたかどうかをどのように確認できますか?
- 23. サブジョブまたはサブフローを動的に起動するにはどうすればよいですか?
- 24. フェイサーバーが起動または起動していません
- 25. Linuxプログラムは、どのように起動されたかを知ることができます:コマンドラインから?またはcronか他の何かによって?
- 26. "プロセスの起動に失敗しました:プロセス2282のタスクを取得できませんでした。
- 27. Perlのプロセス間ミューテックス
- 28. どのように私はbashからCapistranoを起動できますか?
- 29. httpsでJavaサーブレットをどのように起動しますか?
- 30. Eclipseをどのように起動できますか?
情報提供中!しかし、私はまだ疑問を持っています。なぜスケジューラは、キュー内のすべてのスレッドをスリープ状態にすることなく、キュー内の最初のキューをフェッチできないのですか? 2つのうちどれが現在Linux上のposixスレッドライブラリを実装していますか?ありがとう! – zach
これは上記のオプション1です:スケジューラの裁量で1つ目を起こしてください。 –
私はLinux上でpthread_mutex_tが1つのスレッドしか起きないと思います。 –