2018年06月14日
《その400》スレッド(1)
スレッド (1)
私の場合、新版明解C++入門編と新版明解C++中級編で C++ を勉強しただけなので、非同期処理についての知識がありません。
例えば前回までのアプリに、
・CopyAsync や CreateFileAsync 等の非同期関数を create_task関数の引数に渡す。
・非同期関数からの返却値を、then関数が受け取って、ラムダ式が実行される。
というのがありますが、初めて見るコードでした。
意味的には理解できますが、非同期処理の基礎事項を少し確認しておきたい思いました。
というわけで、今回は、スレッドについてです。
下記のプログラムでは、2つのスレッドを並列的に実行しています。
スレッド th1 は、ある程度の時間間隔で
"th1 ・・・1回目"
"th1 ・・・2回目"
・・・・・・
"th1 ・・・6回目"
の6つの文字列を表示します。
スレッド th2 は、一気に
"th2 ・・・1回目"
"th2 ・・・2回目"
・・・・・・
"th2 ・・・6回目"
の6つの文字列を表示します。
したがって、スレッド th1 が
"th1 ・・・1回目"
を表示して次を表示するまでの間に、スレッド th2 の処理が完了してしまうことが予想されます。
下記プログラムの実行結果を見ると、確かにそのようになっています。
以下はプログラムです。
#include <iostream>
#include <thread>
#include <string>
using namespace std;
int main() {
thread th1 = thread([] {
for (int i = 0; i < 6; i++) {
cout << "th1 ・・・" + to_string(i + 1) + "回目\n";
for (int j = 0; j < 10000; j++) {
for (int k = 0; k < 10000; k++)
;
}
}
});
thread th2 = thread([] {
for (int i = 0; i < 6; i++) {
cout << "th2 ・・・" + to_string(i + 1) + "回目\n";
}
});
// スレッド th1 の終了まで待機
// (この記述が無いとエラーになります。)
th1.join();
// スレッド th2 の終了まで待機
// (この記述が無いとエラーになります。)
th2.join();
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7774245
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック