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编译

  • 相关阅读:
    Arduino系列之智能家居蓝牙语音遥控灯(四)
    Arduino系列之光照传感器(三)
    address2line 定位 Android c++奔溃位置
    android UI线程安全问题
    android 后台服务定时通知
    eclipse 完全智能提示
    IOS 7 Xcode 5 免IDP证书 真机调试(转载)
    DS5 调试 android c++
    javap -s 查看java方法签名
    ndk-stack 调试 android c++ 代码崩溃位置
  • 原文地址:https://www.cnblogs.com/svitter/p/4027031.html
Copyright © 2011-2022 走看看