[openmp]使用嵌套互斥锁锁定变量
本文出自:http://www.cnblogs.com/svitter
转载请注明出处。
如果有一个线程必须要同时加锁两次,只能用嵌套型锁函数
| 函数名称 | 描述 |
|---|---|
void omp_init_nest_lock(omp_nest_lock_t *) |
初始化一个嵌套函数锁 |
void omp_destroy_nest_lock(omp_nest_lock_t*) |
结束一个嵌套互斥锁并且释放内存 |
void omp_set_nest_lock(omp_nest_lock_t*) |
获得有一个嵌套互斥锁 |
void omp_unset_nest_lock(omp_nest_lock_t*) |
释放一个嵌套互斥锁 |
int omp_test_nest_lock(omp_nest_lock_t *) |
尝试获取一个互斥锁,成功时返回1,失败返回0 |
/*=============================================================================
#
# Author: svtter - svtter@qq.com
#
# QQ : 57180160
#
# Last modified: 2014-10-15 18:48
#
# Filename: lock.cc
#
# Description:
#
=============================================================================*/
#include "omp.h"
#include <cstdio>
omp_nest_lock_t lock;
int counter = 0;
void inc_counter()
{
printf("Thread id = %d\n", omp_get_thread_num());
for(int i = 0; i < 10000000; i++)
{
omp_set_nest_lock(&lock);
counter++;
omp_unset_nest_lock(&lock);
}
}
void dec_counter()
{
printf("Thread id = %d\n", omp_get_thread_num());
for(int i = 0; i < 10000000; i++)
{
omp_set_nest_lock(&lock);
counter--;
omp_unset_nest_lock(&lock);
}
}
int main()
{
omp_init_nest_lock(&lock);
omp_set_num_threads(4);
#pragma omp parallel sections
{
#pragma omp section
inc_counter();
#pragma omp section
dec_counter();
}
omp_destroy_nest_lock(&lock);
printf("counter=%d\n", counter);
return 0;
}
使用g++ -fopenmp lock.cc -o lock编译
[openmp]使用嵌套互斥锁锁定变量的更多相关文章
- C++11 多线程同步 互斥锁 条件变量
在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...
- 【C】——信号量 互斥锁 条件变量的区别
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里).而互斥锁是用在多线程多任务互斥的,一个线程占用了某 ...
- 【转载】同步和互斥的POSIX支持(互斥锁,条件变量,自旋锁)
上篇文章也蛮好,线程同步之条件变量与互斥锁的结合: http://www.cnblogs.com/charlesblc/p/6143397.html 现在有这篇文章: http://blog.cs ...
- OpenMP 线程互斥锁
OpenMP是跨平台的多核多线程编程的一套指导性的编译处理方案(Compiler Directive),指导编译器将代码编译为多线程程序. 多线程编程中肯定会涉及到线程之间的资源共享问题,就可以使用互 ...
- C++ 并发编程之互斥锁和条件变量的性能比较
介绍 本文以最简单生产者消费者模型,通过运行程序,观察该进程的cpu使用率,来对比使用互斥锁 和 互斥锁+条件变量的性能比较. 本例子的生产者消费者模型,1个生产者,5个消费者. 生产者线程往队列里放 ...
- golang互斥锁和读写锁
一.互斥锁 互斥锁是传统的并发程序对共享资源进行访问控制的主要手段.它由标准库代码包sync中的Mutex结构体类型代表.sync.Mutex类型(确切地说,是*sync.Mutex类型)只有两个公开 ...
- 进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁
Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量.信号量和读写锁. 下面是思维导图: 一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . ...
- UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)
一.使用互斥锁 1.初始化互斥量 pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_init( ...
随机推荐
- js点击拉拽轮播图pc端移动端适配
<div class="content"> <button class="left">left</button> <b ...
- 详解三种java实现多线程的方式
java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- python 基础 for else
for one in many_list: if "k" in one: print "在里面" break else: print "没有在里面&q ...
- Linux 下PHP获取服务器状态CPU、MEM使用率、磁盘使用率、IP地址获取、MAC地址获取等信息记录
获取服务器状态记录使用的是SHELL命令方式进行获取输出结果 然后进行字符串拆分处理等方式进行获取到自己有用信息 贴出获取方式以及常用处理方式 <?PHP $fp = popen('执行SHE ...
- Django2.1中的分页功能详解
django的分页功能类将我们常用的多种方法均封装在Paginator类,根据这些方法我们均可深度定制我们的分页功能. 首先来看看[Paginator] 类的构造方法: class Paginator ...
- 关于web.xml配置中的<url-pattern>
标签<url-pattern> <url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例: <servlet><servlet-n ...
- 使用JFreeChart生成报表
1.JFreeChart简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications,servlets以及JSP等使用所设计. ...
- 动态规划(入门,滚动数组,记录的都是状态):SWUSTACM-1010 魔兽争霸之最后的反击
题目: 1010: 魔兽争霸之最后的反击 Time Li ...
- Apache虚拟主机测试
一.虚拟机主机简介 部署多个站点,每个站点,希望用不同的域名和站点目录,或者是不同的端口,或不同的ip,就需要虚拟主机功能.简单的说一个http服务要配置多个站点,就需要虚拟主机.(一句话一个http ...
- cf984e Elevator
ref我好菜啊 #include <iostream> #include <cstring> #include <cstdio> #include <cmat ...