OpenMP编程->同步机制


/* nowait用来取消栅障 */
void test12()
{
#pragma omp parallel  
	{  
#pragma omp for nowait  
		for (int i = 0; i < 100; ++i)   
		{  
			std::cout << i << "+" << std::endl;  
		}  
#pragma omp for  
		for (int j = 0; j < 100; ++j)   
		{  
			std::cout << j << "-" << std::endl;  
		}  
	}  
}

/* 显式同步栅障  在barrier处进行了同步,然后执行后边的for循环。 */
void test13()
{
#pragma omp parallel  
	{  
		for (int i = 0; i < 100; ++i)   
		{  
			cout<<"ID "<<omp_get_thread_num()<<" ";
			std::cout << i << "+" << std::endl;  
		}  

#pragma omp barrier  
		for (int j = 0; j < 100; ++j)   
		{  
			cout<<"ID "<<omp_get_thread_num()<<" ";
			std::cout << j << "-" << std::endl;  
		}  
	}  
}


/* 声明对应的并行程序块只由主线程完成  */
void test14()
{
#pragma omp parallel  
	{  
#pragma omp master  
		{  
			for (int j = 0; j < 10; ++j)   
			{  
				std::cout << j << "-" << std::endl;  
			}  
		}  

		std::cout << "This will printed twice." << std::endl;  
	}  
}

/*  section用来指定不同的线程执行不同的部分  */
void test15()
{
#pragma omp parallel sections //声明该并行区域分为若干个section,section之间的运行顺序为并行的关系  
	{  
#pragma omp section //第一个section,由某个线程单独完成  
		for (int i = 0; i < 5; ++i)   
		{  
			std::cout <<"i "<< i << "+" << std::endl;  
			cout<<"ID "<<omp_get_thread_num()<<" ";
		}  

#pragma omp section //第一个section,由某个线程单独完成  
		for (int j = 0; j < 5; ++j)   
		{  
			std::cout<<"j " << j << "-" << std::endl;  
			cout<<"ID "<<omp_get_thread_num()<<" ";
		}  
	}  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值