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

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}不同的实例。

最佳答案

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

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

关于c++ - C++ Pragma OMP Critical(名称),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28716014/

10-14 21:50