私はLinux上でpthreadsを使用しています。私のスレッドの1つは、定期的にデバイスファイル記述子のwrite関数を呼び出します。書き込み呼び出しが完了するまでに時間がかかる場合は、他のスレッドを実行できるようにスレッドが一時停止されますか?私はpthreadのスケジューリング機能を設定していないので、私の質問はデフォルトのスレッドの動作に関するものです。スレッド内のI/Oのブロックに関する質問
答えて
他のスレッドが同じリソースに書き込もうとしても、書き込みスレッドが書き込みを完了するのを待っている間に、他のスレッドが実行されます。
デバイスファイル記述子が共有リソースの場合は、ロックを処理する必要があります。しかし、いったんスレッドセーフであれば、そのような共有リソースへの呼び出しはシリアル化されます。したがって、あるスレッドが書き込みを行うと、残りのスレッドはブロックされます。ロックが実装されていない場合、データが文字化けする可能性があります。
私のファイル記述子は共有されていません。一つのスレッドに固有です。そのスレッドが完了するまでに時間がかかる場合は、スケジュールされますか? – Ravi
各スレッドに独自のファイル記述子がある場合、競合は発生しないため、他のスレッドがブロックされる理由はありません。しかし、あなたの質問にはファイル記述子があり、いくつかのスレッドがあるので、ファイル記述子は共有されていると仮定しました。 – Schultz9999
これは競合についての質問ではありません。問題は、1つのスレッドがファイルディスクリプタへの書き込みを完了するのに時間がかかり、他のスレッドがどのようにスケジュールされるのかです。 – Ravi
write()
コールブロックの場合、呼び出しスレッドのみが中断されます。これはPOSIX spec for write()
に記載されています:
すぐ を書き込まれるように要求されたすべての データのための十分なスペースがある場合、実装は そうすべきです。そうでなければ、呼び出し側スレッド がブロックされることがあります。つまり、書き込みに十分なスペースがあるまで、 まで一時停止します。それはプロセスを呼び出していないスレッドを呼び出すと言うこと
注意。
阻止行動をここで明示的に http://www.akkadia.org/drepper/nptl-design.pdf
原則的に定義されているかどうかを確認し、YES、他のスレッドを実行することができます。
しかし、一部のファイルシステムでは、1つのファイルに対して1つの同時IO操作しか許可されないロック機構があることに注意してください。したがって、別のスレッドが別のファイル記述子を介している場合でも、同じファイル上の別のIOを実行すると、write()システムコールの持続時間の間、ブロックされる可能性があります。
その他の機能には、他のカーネル内のロックもあります。しかし、彼らは密接に関連する活動をしていない限り、他のスレッドの実行をブロックしません。
- 1. スレッドに関する2つの質問
- 2. IO - ドキュメント - 質問
- 3. スレッド同期に関する質問
- 4. ASP.NETスレッド+デザインに関する質問
- 5. Androidスレッド/サービスに関する質問
- 6. スレッドの質問
- 7. tin can can apiに関する質問内の質問?
- 8. C++ - NoobバイナリファイルIO質問
- 9. Androidスレッドの質問
- 10. C++での並列スレッドに関する一般的な質問
- 11. djangoスレッドの安全性に関する質問
- 12. 非同期プログラミングに関する質問。ネットでのスレッド
- 13. インスタンスフィールドとスレッド起点の安全性に関する質問
- 14. スレッドと変数のコピーに関する単純な質問
- 15. 少数のWebdriver IO Mocha Chaiの質問
- 16. Java:スレッドごとの接続をブロックするコード例IO対NIO?
- 17. [Scala]:アクターとブロックIOの問題
- 18. C:ヘッダーファイル内の関数のプロトタイプに関する質問
- 19. vim質問:コードのブロックをタブする
- 20. スレッドの質問 - java.util.concurrent - Runnable/Callable
- 21. Objective Cのスレッド質問
- 22. OpenMPスレッド数質問
- 23. Androidの非ブロックIO
- 24. Azureテーブルストレージ:テーブル内のオブジェクトの構造に関する質問
- 25. コアデータ内のエンティティのインデックスに関する質問
- 26. スレッド内の変数の扱いに関する問題
- 27. スレッド内のdjangoのcall_commandに関する問題
- 28. タブバーコントローラに関する質問
- 29. プロセスマップに関する質問
- 30. loadNibNamedに関する質問:
これは理にかなっているようですが、pthreadのデフォルトのスケジューリング動作を記述したドキュメントは見つかりませんでした。 – Ravi
私はこれが興味深い読書であることを発見しました:http://www.icir.org/gregor/tools/pthread-scheduling.html – cubic1271
ありがとう、それは役立ちます。 – Ravi