Представьте меня есть метод класса, который содержит критическую область:C++ Прагма OMP критическое (имя)
class A{
public:
A(){};
method(){
#pragma omp critical(name)
{ //do something }
}
}
Теперь у меня есть два экземпляра A
, то есть. A a1
и A a2
. Каково поведение от a1.method()
и a2.method()
? Может ли {//do something}
быть выполнен в одновременно?
Ultimatly, я хочу, чтобы запретить одновременный вызов {//do something}
на том же экземпляре , но чтобы одновременно вызов {//do something}
на другой экземпляр.
'Нить ждет в начале критической области, пока ни один другой поток не выполнит критическую область (в любом месте программы) с тем же именем.« Кажется, достаточно, дополнительная синхронизация не требуется. –