//分配四个线程,做多线程for循环 void test2() { 	const int NUMBER = 100;   	int* dataA = new int[NUMBER];   	int* dataB = new int[NUMBER];   	for (int i= 0; i < NUMBER; i++)   	{   		dataA[i] = i+1;   		dataB[i] = 2*(i+1);   	}       	long double sum = 0.0;    	omp_set_num_threads(4);   #pragma omp parallel for reduction(+:sum)   	for (int i = 0; i < NUMBER;  i++)    	{   		sum += dataA[i] + dataB[i];  		cout<<omp_get_thread_num()<<" "; 	}      	cout<<sum<<endl;   	delete [] dataA;   	delete [] dataB;   }

//为每个section分配一个线程,适用于函数 void test3() {  	//分配四个线程 	omp_set_num_threads(4);   #pragma omp parallel 	{  #pragma omp sections  		{ #pragma omp section  			printf("section 1 ThreadId = %d\n", omp_get_thread_num());  #pragma omp section  			printf("section 2 ThreadId = %d\n", omp_get_thread_num());  #pragma omp section  			printf("section 3 ThreadId = %d\n", omp_get_thread_num());  #pragma omp section  			printf("section 4 ThreadId = %d\n", omp_get_thread_num());  		} 	} }

//并行内部私有,不传出。 void test4() { 	int share_a = 10; // 共享变量   	int share_to_private_b = 10; //通过private子句修饰该变量之后在并行区域内变为私有变量    #pragma omp parallel    	{    #pragma omp for private(share_to_private_b)    		for (int i = 0; i < share_to_private_b; ++i) //该循环变量是私有的,若为两个线程,则一个线程执行0 <= i < 5,另一个线程执行5 <= i < 10   		{   			std::cout << i << std::endl;   		}   	}   }


//并行区域内私有,不传出。 void test5() {  	int share_a = 10; // 共享变量   	int share_to_private_b = 10; //通过private子句修饰该变量之后在并行区域内变为私有变量    #pragma omp parallel for firstprivate(share_to_private_b)    	for (int i = 0; i < 10; ++i)    	{   		cout<<"ID "<<omp_get_thread_num()<<"  "; 		std::cout << ++share_to_private_b << std::endl;   	}   	cout<<"share_to_private_b is :"<<share_to_private_b<<endl;  }


 //并行区域内私有,传出 void test6() {  	int shared_to_last_private = 1;  	omp_set_num_threads(1);   #pragma omp parallel for lastprivate(shared_to_last_private) firstprivate(shared_to_last_private)    	for (int i = 0; i < 10; ++i)    	{   		std::cout << ++shared_to_last_private << std::endl;   	}    	std::cout << "After: " << shared_to_last_private << std::endl;    } 


////共享 传出  void test7() { 	int sum = 0; omp_set_num_threads(4);   #pragma omp parallel for shared(sum)    	for (int i = 0; i < 10; ++i)    	{   		sum += i;   		cout<<"ID "<<omp_get_thread_num()<<"  "; 		std::cout << sum << std::endl;   	}    	std::cout << "After: " << sum << std::endl;   }