3 개의 작업을 병렬로 처리했습니다. 최소, 최대 및 평균 두 개의 숫자를 인쇄했습니다. 첫 번째 작업은 min 값을 두 번 인쇄하고 출력이 인접 해있을 것으로 예상합니다.C++의 parallel_invoke에서 예기치 않은 결과가 발생했습니다
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"(최소값)을 인쇄해야하는 첫 번째 작업이 분할됨을 의미합니다. 왜?
"인쇄"는 단지 예일뿐입니다. 예를 들어 할당을 사용할 수 있습니다. 결과는 동일합니다. –