web-dev-qa-db-ja.com

スレッド化はプラットフォームに依存するのはなぜですか?

「Qt開発の基礎」の第12章を読んでいますが、スレッディングはプラットフォームに依存していると読みました。誰かが説明できるのはなぜですか?私はスレッドの使い方を知っていますが、彼らが言ったことは私にはそれほど明確ではありません。

5
user185581

読んでいる本は2007年に出版されました。スレッドを管理するためのC++ APIは2011年まで標準化されていませんでした。当時、異なるシステムでは、まったく異なるプラットフォーム固有のライブラリ(pthreads、win32スレッドなど)を使用する必要がありました。今、これはもはや真実ではありません。あなたの本は古くなっています。

14
Jules

...スレッド化はプラットフォームに依存します、誰かが説明できます、なぜですか?

プラットフォームの依存関係は通常、スレッドスケジューラの動作方法の違いです。実際、スレッドスケジューラは次の理由により、プラットフォームによって動作が異なります。

  • 異なるオペレーティングシステムおよびバージョン間でのスレッドスケジューラアルゴリズムの違い。
  • スケジューラー調整パラメーターの違い;例えば「タイムスライス」の長さ、スケジューラがスケジューリング時に過去のスレッド動作をどのように考慮するかなど
  • ハードウェアプラットフォームの違い。例えばコアの数など
  • コンパイラーの違いなど、スレッドがデータ構造を共有するときの動作の違い(特に、適切な同期のルールに従わない場合)
  • qtアプリケーション以外のシステムで実行されているものなど、ワークロードの違い。

なぜ違いがあるのですか?まあ、どのようにして違いを回避するかはわかりません!スレッドスケジューラが同じように動作する程度にプラットフォームを標準化することは非現実的/不可能です。


プラットフォームの依存関係のもう1つの側面は、歴史的に、スレッド化のための多数の異なるC/C++ APIが存在していたことです。 (このスケールの感触をつかむには、 https://en.wikipedia.org/wiki/List_of_C%2B%2B_multi-threading_libraries を参照してください。)

これは、古いコードベースで作業している場合や古いC++コンパイラ/ライブラリを使用している場合を除き、公式のC++スレッドライブラリが存在するため、それほど問題にはなりません。

4
Stephen C