c ++ pragma omp critical(name)

时间:2015-02-25 10:00:32

标签: c++ openmp critical-section

想象一下,我有一个包含关键区域的类方法:

class A{
    public:
        A(){};

        method(){
            #pragma omp critical(name)
                { //do something }
        }
}

现在我有两个A个实例,即。 A a1A a2。什么是行为 a1.method()a2.method()?可以在{//do something}处执行 同一时间?

最后,我想禁止{//do something}同时打电话给{//do something} 相同的实例,但允许同时调用{{1}} 不同的实例。

1 个答案:

答案 0 :(得分:1)

关键部分对于对象的所有实例都是相同的 - 一次只能有一个线程进入。

要允许不同的实例单独管理访问,请使用实例拥有的互斥锁。您可以使用omp_init_lock()和其他omp_xxx_lock()函数,std::mutex或其他互斥实现。