zoukankan      html  css  js  c++  java
  • [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
    ", 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
    ", 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
    ", counter);
    
        return 0;
    }
    
    

    使用g++ -fopenmp lock.cc -o lock编译

  • 相关阅读:
    第一章 第二节逻辑代数基础
    第一章 第一节数制与编码
    Altium Designer多原理图、PCB更新处理
    AD添加LOGO的方法
    XML中<beans>属性
    程序员值得学习的技术博客
    设计模式
    js分页实例
    Java构造和解析Json数据的方法
    H5+ 移动app学习之三 App离线存储
  • 原文地址:https://www.cnblogs.com/svitter/p/4027031.html
Copyright © 2011-2022 走看看