OpenMP 线程互斥锁

OpenMP是跨平台的多核多线程编程的一套指导性的编译处理方案(Compiler Directive),指导编译器将代码编译为多线程程序。

多线程编程中肯定会涉及到线程之间的资源共享问题,就可以使用互斥锁,就是只有获得互斥锁的线程可以执行,其他线程阻塞。

1.OpenMP中的互斥锁函数

  void omp_init_lock(omp_lock *)              初始化互斥器

  void omp_destroy_lock(omp_lock *)       销毁互斥器

  void omp_set_lock(omp_lock *)              获得互斥器

  void omp_unset_lock(omp_lock *)          释放互斥器

  bool omp_test_lock(omp_lock *)             试图获得互斥器,如果获得成功返回true,否则返回false

2.代码实例

 1 #include <iostream>

 2 #include <omp.h>

 3 

 4 static omp_lock_t lock;

 5 void putMes(int i)

 6 {

 7     std::cout << i << ":AA" << std::endl;

 8     omp_set_lock(&lock); //获得互斥器

 9     sleep(1);

10     std::cout << i << ":BB1" << std::endl;

11     sleep(1);

12     std::cout << i << ":BB2" << std::endl;

13     omp_unset_lock(&lock); //释放互斥器

14 }

15 

16 int main()

17 {

18     omp_init_lock(&lock); // 初始化互斥锁

19 #pragma omp parallel for

20     for (int i = 0; i < 4; ++i) 

21     {

22         putMes(omp_get_thread_num());

23     }

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

25     return 0;

26 }

编译执行(可以看到BB1,BB2总是顺序一起输出的):

OpenMP 线程互斥锁

你可能感兴趣的:(open)