OpenMP编程->互斥锁函数


//互斥锁同步   #pragma opm atomic   x< + or * or - or * or  / or & or | or << or >> >=expr
void test9()
{
	int sum = 0;   

	std::cout << "Before: " << sum << std::endl;  
omp_set_num_threads(3); 
#pragma omp parallel for  
	for (int i = 0; i < 20000; ++i)   
	{  
#pragma omp atomic  
		sum++;
		//cout<<"ID "<<omp_get_thread_num()<<endl;
	}  

	std::cout << "After: " << sum << std::endl;  
}

//临界区声明方法,可以对某个并行程序块进行防护。
void test10()
{
	int sum = 0;   

	std::cout << "Before: " << sum << std::endl;  

#pragma omp parallel for  
	for (int i = 0; i < 100; ++i)   
	{  
#pragma omp critical (a)  
		{  
			test9();
			sum = sum + i * 2;  
		}  
	}  

	std::cout << "After: " << sum << std::endl; 
}


/*  对for循环中的所有内容进行加锁保护,同时只能有一个线程执行for循环中的内容。  */
static omp_lock_t lock; 
void test11()
{
	omp_init_lock(&lock); // 初始化互斥锁  

#pragma omp parallel for  
	for (int i = 0; i < 5; ++i)   
	{  
		omp_set_lock(&lock); //获得互斥器   
		std::cout << omp_get_thread_num() << "+" << std::endl;  
		std::cout << omp_get_thread_num() << "-" << std::endl;  
		omp_unset_lock(&lock); //释放互斥器  
	}  

	omp_destroy_lock(&lock); //销毁互斥器  
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值