我已经并行放置了3个任务:打印最小值,最大值和两个数字的平均值。第一个任务打印最小值两次,我希望它的输出是连续的。
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”(最小值)的第一个任务被拆分。为什么?
答案 0 :(得分:0)
每次调用wcout或cout都可以在'&lt;&lt;'分开运算符,如果要打印整行而不中断使用printf样式输出。
答案 1 :(得分:0)
代码并行执行。为什么期望块是连续的?关于并行编程的重点是你要保证这一点 - 否则它不会是并行的而是顺序的。
如果要保留执行顺序,则需要将连续的块包装在critical section中。