OpenMP 线程同步之临界区

简介: 多核/多线程编程中肯定会用到同步互斥操作。除了互斥变量以为,就是临界区。 临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段。 在OpenMP中临界区声明方法如下: #pragma omp critical [(name)] //[]表示名字可选 {     //需要同...

多核/多线程编程中肯定会用到同步互斥操作。除了互斥变量以为,就是临界区。

临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段。

在OpenMP中临界区声明方法如下:

#pragma omp critical [(name)] //[]表示名字可选

{

    //需要同一时刻只能有一个线程访问的代码

}

 

如下面的代码:

 1 #include <stdio.h>
 2 #include <omp.h>
 3 
 4 int main()
 5 {
 6     int sum = 0;
 7 #pragma omp parallel
 8     printf("Hello World!!!\n");
 9 
10 #pragma omp parallel for    
11     for (int i = 0; i < 10000; ++i)
12     {
13 #pragma omp critical
14         {
15           sum = sum + i%7;
16         }
17     }
18     printf("Sum: %d\n" ,sum);
19     return 0;
20 }

执行结果:

 

可以看到,机器有8个核,启动了8个线程。如果将代码中的第13行注释掉,执行结果中的Sum基本就是不确定的

相关文章
|
24天前
|
API 调度
【FreeRTOS】互斥锁的使用
【FreeRTOS】互斥锁的使用
|
5月前
|
Cloud Native Go C语言
C 语言的 互斥锁、自旋锁、原子操作
C 语言的 互斥锁、自旋锁、原子操作
|
2天前
|
安全 Linux 调度
【linux线程(二)】线程互斥与线程同步
【linux线程(二)】线程互斥与线程同步
|
4月前
|
安全 Linux C语言
Linux系统编程(线程同步 互斥锁)
Linux系统编程(线程同步 互斥锁)
37 0
|
2月前
|
Linux
Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
74 0
Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
|
6月前
QT多线程(线程互斥)
QT多线程(线程互斥)
42 0
|
10月前
|
存储 缓存 安全
Linux下线程同步(带你了解什么是互斥锁、死锁、读写锁、条件变量、信号量等)
Linux下线程同步(带你了解什么是互斥锁、死锁、读写锁、条件变量、信号量等)
123 0
|
Linux
一文读懂Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
Hello、Hello大家好,我是木荣,今天我们继续来聊一聊Linux中多线程编程中的重要知识点,详细谈谈多线程中同步和互斥机制。
8486 1
一文读懂Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
|
安全 算法 Linux
Linux多线程:线程安全、线程互斥、死锁、线程同步
Linux多线程:线程安全、线程互斥、死锁、线程同步
122 0
|
API C# Windows
C#多线程(4):进程同步Mutex类
C#多线程(4):进程同步Mutex类
215 0
C#多线程(4):进程同步Mutex类