2018年06月16日
《その404》ラムダ式の参照キャプチャ
ラムダ式の参照キャプチャ
キャプチャリストの変数を参照にすることで、ラムダ式の中から外部の変数にアクセスできるようになります。
下記のプログラムのラムダ式は、
[&a, n, d] { ・・・・・・ }
となっていますから、ラムダ式の中から、外部の変数 a を操作できます。
スレッドによる並行処理
スレッドによる並行処理の様子を実感したいと思い、単純すぎるとは思いますが、下記のようなプログラムを作りました。
プログラムでは、0.000001 を 50000 × 50000 回 足し算します。
計算に少し時間がかかるので、この計算をスレッド th に任せることにして、プログラムは a の値を3回出力します。
スレッド th での計算が並行して行なわれているため、a の値は、取得するたびに増加しています。
スレッド th での処理に時間がかかるので、
th.join();
として、処理終了まで待機します。
最後に、待機後の a の値を取得して表示します。
以下はプログラムです。
#include <iostream>
#include <thread>
using namespace std;
int main() {
double a = 0;
int n = 50000;
double d = 0.000001;
cout << "・・・・・・スレッドでの作業開始\n";
auto th = thread([&a, n, d] {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
a += d;
cout << "・・・・・・スレッドでの作業完了!\n";
});
cout << "・・・・・・待機中の別作業\n";
cout << "(1) a = " << a << '\n';
cout << "(2) a = " << a << '\n';
cout << "(3) a = " << a << '\n';
cout << "・・・・・・まだ待機中\n";
th.join();
cout << "(★) a = " << a << '\n';
}
以下はプログラム実行結果です(2回実行しました)。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7784309
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック