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

  • 相关阅读:
    第3章 机器学习的典型应用 3-2 典型应用-聚类
    第3章 机器学习的典型应用 3-1 典型应用-关联规则
    6-13 Hog特征1
    6-12 SVM小结
    Linux中常见的环境变量笔记
    Linux中常见的环境变量笔记
    Linux中shell变量基础概念笔记
    Linux中shell变量基础概念笔记
    Linux常用内建命令笔记
    Linux常用内建命令笔记
  • 原文地址:https://www.cnblogs.com/svitter/p/4027031.html
Copyright © 2020-2023  润新知