私は以下を読んでいます: "スレッドはライブラリとして実装できません"(http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf)、私はその記事の主なアイデアに同意します。しかし、私は疑問を持っています。結局のところ、C++モデル(C++ 11)の前には、スレッド化のネイティブサポートがありませんでした。しかし、Boostはライブラリとしてスレッドを提供することができました。だから、どうしたの?/私が誤解したことは?ライブラリとしての実装スレッド
答えて
その情報はまだ関連していますが、そのペーパーは少し古くなっています。それ以来、C++ 11はこれらの問題に対処するためのいくつかの更新を導入しました。特に、C++ 11では、マルチスレッドプログラムを扱うために、より明確に定義されたメモリモデルが追加されました。これは、この論文で説明されているJavaに似ています。 C++ 11はまた、 "シーケンシング"と呼ばれるsequence pointsのコンセプトを固め、独自のスレッドライブラリ(boostのものに基づく)を追加し、ロックフリーアルゴリズムを扱うためのいくつかの機能を含むアトミックライブラリを追加します。
したがって、C++委員会は、マルチスレッド環境での動作に関してC++言語の仕様を改善しました。また、最小限のメモリモデルの期待値を明確に定義しています。
これは完璧ではありませんが、私たちは私たちよりはるかに良い場所にあります。私が推薦する
情報:
- アンソニー・ウィリアムズの本: "アクションにはC++の同時実行"
- ハーブサッターの "Atomic Weapons" 会談。
シーケンスポイントはC++ 11では新しくありません。あなたが与えたリンクによれば、C++ 11は実際には前後の不確定性( 'foo(i ++、i ++)'のような)、または順序付けされていない(非原子データ競合がこのカテゴリに入る)という概念で置き換えました。しかし、キーポイントは正しいです:C++ 11は、マルチスレッドのC++抽象マシンで意味をなさないようにシーケンシングの定義を変更しました。 –
@Peter Cordesあなたの修正に基づいて編集されました。 – ChrisG0x20
ブーストスレッドは、基盤となるOS(Win32スレッドまたはPOSIXスレッド)によって提供されるネイティブスレッドのラッパーとして機能します。
また、コンパイラを書く人々は、正常に動作するためには、標準自体で必要とされる以上の動作を定義しなければならないという事実にも依存していました。
残念ながら、Boostスレッドがどれくらいの処理能力を持っていたのか(スレッドローカルストレージのようなものを制御するためのマクロはかなりありますが、かなりの数の施設への半携帯アクセスが可能です)。
- 1. スレッドの実装
- 2. Pythonスレッド/スレッドの実装
- 3. OpenGLライブラリの実装
- 4. ShortcutBadgerライブラリの実装
- 5. ウィンドウのC11スレッドの実装
- 6. スレッド間メッセージングの実装
- 7. 再帰スキームのライブラリ実装
- 8. SOAPライブラリWS-ReliableMessagingの実装
- 9. Androidライブラリ実装の問題
- 10. libx265とlibx264ライブラリはデコーダを実装していますか?
- 11. noSQL実装:スレッド型メッセージングシステム
- 12. スレッドとasyncio APIライブラリ
- 13. jqueryライブラリを実装しているangle2アプリケーションのテスト方法
- 14. ライブラリ関数の新しい実装とその中の古い実装の呼び出し
- 15. ライブラリとしてエクスポートされたダイアログでのローカライズの実装方法
- 16. Haskellのライブラリ関数の実装方法
- 17. Javaの組み込みライブラリの実装
- 18. C#デザインは3層で、.dll(ライブラリ)としてレイヤーを実装します
- 19. 条件付きランダムフィールド(CRF)の実装/ライブラリ
- 20. React.jsサードパーティのライブラリ実装を扱う
- 21. Android Studio 2.1実装済みのAARライブラリ
- 22. JSONライブラリJava-ToString関数の実装
- 23. 無限スクロールのリアクション実装/ライブラリ?
- 24. スレッドとAsyncTaskの間の通信を実装する方法
- 25. GPUImage Swiftライブラリを使用してカスタムフィルタを実装する
- 26. Javaライブラリを使用してpwinty APIを実装する
- 27. ライブラリとしてのJetty:複数のスレッドを扱う方法は?
- 28. スレッドセーフなスレッドと非スレッドセーフなカウンタの実装
- 29. スレッドでforループを実行するマルチスレッドを実装しています
- 30. ライブラリと参照実装のライセンスへの影響
Pthreadsを使用したCのスレッディングのための「ネイティブ」サポートはありませんでした。このペーパーでは、動作するように見えるスレッドライブラリの例としてこれを使用していますが、Pthreads仕様ではレースが禁止されています。他のスレッドがそれを変更している間に共有変数を更新します。 問題は、レースが存在するかどうかは、 プログラミング言語のセマンティクスによって決まります。 では、正しく定義されたメモリモデルが必要です。 **この定義は循環**です。 'スレッドライブラリが存在し、実際には動作しましたが、それはハックです。 –
_スレッドは実装できません**効率的かつ正確に**ライブラリとして。 Boost :: Threadは、記事で概説されている多くの点に苦しんでいました。関連性:http://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g –
"Pthreadsの仕様では、競合他のスレッドがそれを変更している間に共有変数にアクセスします。 "うわー、どうやって動くの?結局、ミューテックスを取ることは一種のレースだよね? – Gilgamesz