2 つの数値の最小値、最大値、平均値を出力する 3 つのタスクを並行して配置しました。最初のタスクは最小値を 2 回出力しますが、出力は連続していると思います。
int wmain()
{
__int64 elapsed;
elapsed = time_call([&]
{
double a = 1.0;
double b = 5.0;
parallel_invoke(
[&]{for( size_t i = 0; i < 2; ++i )
{
PrintMinValue(a, b);
}},
[&]{PrintMaxValue(a, b);},
[&]{PrintAvgValue(a, b);});
});
wcout << L"parallel time: " << elapsed << L" ms" << endl << endl;
}
このプログラムを数回実行しました。5、3、1、1 または 3、1、1、5 などのすべての出力は理解できます。ただし、1、5、3、1 などの一部の出力は明らかではありません。これは、連続するブロックで "1" (最小値) を 2 回出力する必要がある最初のタスクが分割されることを意味します。なんで?