OpenMP编程(5)—同步结构(master、critical、barrier、atomic、flush、ordered)

本文详细介绍了OpenMP中的同步结构,包括master指令(仅主线程执行)、critical指令(互斥执行)、barrier指令(线程同步)、atomic指令(原子操作)、flush指令(确保数据一致性)和ordered指令(循环按序执行)。通过实例代码展示了它们在多线程编程中的应用和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenMP的同步结构(Synchronization Constructs)指令包master、critical、barrier、atomic、flush、ordered等

1. master指令
  • master指令指定的区域只由主线程执行,团队中其他线程都跳过该区域代码
  • 本指令没有隐含的barrier,即其他线程不用再master区域结束处同步,可立即执行后续代码。
    代码示例如下
#pragma omp parallel 
	{
   
	#pragma omp master
		{
   
			printf("in master thread %d\n", omp_get_thread_num());
		}

		printf("out master thread %d\n", omp_get_thread_num());
	}

运行结果如下,可见只有主线程0执行了master区域代码。
在这里插入图片描述

2. critical指令
  • critical指令指定的代码区域,一次只能由一个线程执行。
  • 如果一个线程当前正在一个critical区域内执行,而另一个线程到达该区域并试图执行它,它将阻塞,直到第一个线程退出该区域。

其语法格式如下

#pragma omp critical [ name ]  newline

   structured_block

其中有一个可选名称选项,该选项允许存在多个不同的critical区域,其特性如下:

  • 该名称充当critical区域全局标识符,相同名称的不同临界区域被视为同一区域。
  • 所有未命名的critical区域均视为同一区域。
    critical用法很简单,下面演示下命名critical的特性
2. 1 不同名称的多个critical区域

代码示例如下:

#pragma omp parallel sections
	{
   
	#pragma omp section
		{
   
			#pragma omp critical (critical1)
			{
   
				for (int i=0; i < 5; i++)
				{
   
					printf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值