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