最初AB的值是10,通過用於環路AB創造了一些延遲之後再被設置爲55,然後其在此代碼印刷..pragma和omp如何在這兩個代碼中產生相同的輸出?
#include <iostream>
using namespace std;
int main()
{
long j, i;
int ab=10 ;
for(i=0; i<1000000000; i++) ;
ab=55;
cout << "\n----------------\n";
for(j=0; j<100; j++)
cout << endl << ab;
return 0;
}
此代碼的目的也是一樣的,但什麼從這段代碼中可以看出,在某些延遲之後,在第二個雜注塊應該打印10和55(多線程)之前,ab的值變爲55,但是第二個雜注塊僅在第一個for循環創建的延遲之後打印,然後打印只有55.
#include <iostream>
#include <omp.h>
using namespace std;
int main()
{
long j, i;
int ab=10;
omp_set_num_threads(2);
#pragma omp parallel
{
#pragma omp single
{
for(i=0; i<1000000000; i++) ;
ab=55;
}
#pragma omp barrier
cout << "\n----------------\n";
#pragma omp single
{
for(j=0; j<100; j++)
cout << endl << ab;
}
}
return 0;
}
那對於循環確實會延遲程序嗎?任何體面的編譯器都會將其完全移除。並且[不要不必要地使用'endl'](http://stackoverflow.com/q/213907/995714) –