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.代码实例

#include <iostream>
#include <omp.h>

static omp_lock_t lock;
void putMes(int i)
{
    std::cout << i << ":AA" << std::endl;
    omp_set_lock(&lock); //获得互斥器
    sleep(1);
    std::cout << i << ":BB1" << std::endl;
    sleep(1);
    std::cout << i << ":BB2" << std::endl;
    omp_unset_lock(&lock); //释放互斥器
}

int main()
{
    omp_init_lock(&lock); // 初始化互斥锁
#pragma omp parallel for
    for (int i = 0; i < 4; ++i) 
    {
        putMes(omp_get_thread_num());
    }
    omp_destroy_lock(&lock); //销毁互斥器
    return 0;
}

版权声明:本文为MeetingParis原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MeetingParis/article/details/105619161

智能推荐

Netty框架构建Nio编程

~~~ 随手点赞,养成习惯 ~~~ 为什么选择Netty框架 Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的。 优点: ① API使用简单,开发门槛低 ②功能强大,预置了多种编解码功能,支持多种主流协议 ③ 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展; ④性能高,通过与其他业界主流的NIO框架对比,Nett...

【JZOJ5262】【GDOI2018模拟8.12】树(DP,性质题)

Description Solution 首先我们可以知道两个性质:1、路径u-v和路径v-w可以合并为路径u-w;2、路径u1-v1加路径u2-v2和路径u1-v2加路径u2-v1是等价的(就是起始点和终点可以互换) 那么知道这些性质之后就很好做了。我们只用知道每个点多少次做起点和多少次做终点。 我们设f[i]表示满足i子树的需求i上的值要是多少。 那么枚举i的所有儿子,判断a[i]-f[i],...

【String-easy】541. Reverse String II 反转的元素,有反转个数和间隔

1. 题目原址 https://leetcode.com/problems/reverse-string-ii/ 2. 题目描述 3. 题目大意 给定一个字符串,和字符串的间隔k, 这个k表示每k个数反转一次,然后再间隔k个元素再反转k个元素。 4. 解题思路 只要按照间隔去反转就可以了。然后间隔k个元素不反转是通过让i每次递增 2*k完成的。 5. AC代码 6. 相似题型 【1】344. Re...

【C语言笔记结构体】

我们都知道C语言中变量的类型决定了变量存储占用的空间。当我们要使用一个变量保存年龄时可以将其声明为int类型,当我们要使用一个变量保存某一科目的考试成绩时可以将其声明为float。 那么,当我们要做一个学生信息管理系统时,需要保存学生的姓名、学号、年龄等信息,该怎么做呢? 如当要保存三个学生的信息时, 方法一是: 方法二是: 显然,方法二跟更清晰,因为它把name、num、age都集成在一个模板,...

39. Combination Sum 回溯算法简析

LeetCode传送门     这道题要求给你一组正数 C,然后给你一个目标数 T,让你从那组C中找到加在一起等于 T 的那些组合。     例如:给你 [2,3,6,7] 和 7,则返回 [[2,2,3],[7] ] 。      想解决这个问题前,我们首先引入一个新问题,图(树)的遍历问题。  ...

猜你喜欢

git安装|Linux系统安装 git|Linux如何安装git?Linux通过远程安装git|

Git是一个开源的分布式版本控制系统,可以有效、高速地处理项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 开发者需要一个GIT账号,通过这个查看项目的提交记录,可以更加清楚项目的开发情况,便于版本控制。 以下介绍在CentOS8操作系统搭建GIT服务器。   一、安装GIT服务器流程   安装GIT...

Vue框架基础概要

  Vue.js是什么? Vue.js(读音 /vjuː/,类似于 view 的读音)是一套构建用户界面(user interface)的渐进式框架。与其他重量级框架不同的是,Vue 从根本上采用最小成本、渐进增量(incrementally adoptable)的设计。Vue 的核心库只专注于视图层,并且很容易与其他第三方库或现有项目集成。另一方面,当与单文件组件和...

基于Prometheus和Grafana的监控平台 - 运维告警

通过前面几篇文章我们搭建好了监控环境并且监控了服务器、 数据库、应用,运维人员可以实时了解当前被监控对象的运行情况,但是他们不可能时时坐在电脑边上盯着DashBoard,这就需要一个告警功能,当服务器或应用指标异常时发送告警,通过邮件或者短信的形式告诉运维人员及时处理。 今天我们就来聊聊 基于Prometheus和Grafana的监控平台的异常告警功能。 告警方式 Grafana 新版本的Graf...

mac安装tomcat

下载tomcat 前往官网下载:https://tomcat.apache.org/download-90.cgi 下载 解压tomcat 将apache-tomcat-9.0.36.tar.gz解压并重命名为Tomcat 移动Tomcat 打开访达使用快捷键Command+Shift+G进入/Library/,将刚才解压并重命名的Tomcat放进去 快捷键 Library 修改权限 进入终端输入...