- 締切済み
C++マルチスレッド処理について
こんにちは 現在スレッドを作成して,マルチスレッド処理をしようとしているのですが, 全然理解できないので皆様のお力をお貸し下さい。 やりたい事は, (1) メインスレッドからスレッド1を作成。 (2) スレッド1では,ひたすらファイルなどからデータを取得させる。(読み込めなくなるまで) (3) メインスレッドでは,時々スレッド1を止めて,再度処理を続行させたい。 class Sample { public: // Sampleオブジェクト作成,同時にスレッド1を作成 Sample* create(); // スレッド1を止めて,再度動かす void process(); private: // この関数をスレッド1で処理させる // 内部では,読み込めなくなるまで無限ループ? void get(); }; スレッドに関してはイメージが湧くのですが, mutex (必要ですか?) に関しては一向に理解できません。 何を排他制御するのでしょうか。オブジェクト? 関数? 複雑ではなさそうなのですが,今までシングルスレッドの処理のみ書いていたため ピンときません。 よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
> 何を排他制御するのでしょうか。オブジェクト? 関数? スレッドです。 (クリティカルセクションに)同時に入って来られては困るもの、なので。 排他制御についての勉強なら、私はオペレーティング・システムの仕組みについて解説した書籍を読むことをおすすめします。
- kumatti1
- ベストアンサー率60% (73/121)
std::thread でどうぞ。( ・∀・)つ旦
- kmee
- ベストアンサー率55% (1857/3366)
一度、並列処理について詳しく書かれた本等を読むのがいいと思います。 並列処理では、複数のスレッドで共通の資源を使うことがあります。 例えば、グローバル変数G=0をスレッドA,B で「G++」を実行するとします。 すると A1: Gの値を読む (=0) A2: 読んだ値を++する(=1) A3:変数Gの戻す(G=1) B1: Gの値を読む (=1) B2: 読んだ値を++する(=2) B3:変数Gの戻す(G=2) となる場合もあれば A1: Gの値を読む (=0) B1: Gの値を読む (=0) A2: 読んだ値を++する(=1) A3:変数Gの戻す(G=1) B2: 読んだ値を++する(=1) B3:変数Gの戻す(G=1) となる場合もあります。 これでは困るので、Aが使っている間は、B には操作させない、ということをするのが「排他処理」です。 MUTEXは、排他処理を実現するための道具の一つです。 必要かどうか、は、共有する資源があるのかどうか、が判断材料となります。