假设我有一个包含临界区的类方法:
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}
不同的实例。
最佳答案
临界区对于对象的所有实例都是相同的——一次只有一个线程能够进入。
要允许不同的实例分别管理访问,请使用实例拥有的互斥量。您可以使用 omp_init_lock()
和其他 omp_xxx_lock()
函数、std::mutex
或其他互斥实现。
关于C++ pragma omp critical(名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716014/