想象一下,我有一个包含关键区域的类方法:
class A{
public:
A(){};
method(){
#pragma omp critical(name)
{ //do something }
}
}
现在我有两个A
个实例,即。 A a1
和A a2
。什么是行为
a1.method()
和a2.method()
?可以在{//do something}
处执行
同一时间?
最后,我想禁止{//do something}
同时打电话给{//do something}
相同的实例,但允许同时调用{{1}}
不同的实例。
答案 0 :(得分:1)
关键部分对于对象的所有实例都是相同的 - 一次只能有一个线程进入。
要允许不同的实例单独管理访问,请使用实例拥有的互斥锁。您可以使用omp_init_lock()
和其他omp_xxx_lock()
函数,std::mutex
或其他互斥实现。