C++ C+;中并行#u调用的意外输出+;

C++ C+;中并行#u调用的意外输出+;,c++,ppl,C++,Ppl,我将三个任务并行:打印最小值、最大值和两个数字的平均值。第一个任务打印两次最小值,我希望它的输出是连续的 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

我将三个任务并行:打印最小值、最大值和两个数字的平均值。第一个任务打印两次最小值,我希望它的输出是连续的

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;
}
intwmain()
{
__int64已过;
已用时间=通话时间([&]
{
双a=1.0;
双b=5.0;
并行调用(
[&]{for(大小i=0;i<2;++i)
{
PrintMinValue(a,b);
}},
[&]{PrintMaxValue(a,b);},
[&]{PrintAvgValue(a,b);};
}); 

wcout对wcout或cout的每次调用都可以在“处拆分。代码是并行执行的。为什么您希望块是连续的?并行编程的关键是您放弃这种保证,否则它将不是并行的,而是顺序的


如果要保留执行顺序,则需要将连续块包装在一个完全不改变任何内容的。

@EugeneZak中。代码唯一能确保的是第一个块中的指令不会同时按顺序执行。但它们与其他指令的关系没有定义。That是并行执行的全部要点。谢谢,这很有意义。“打印”只是一个示例。例如,您可以使用赋值。结果将是相同的。