Mutex ile aynı anlama gelir. Söz dizimi şöyle
#pragma omp critical(name)
Açıklaması şöyle,
The critical section names are global to the entire program (regardless of module boundaries). So if you have a critical section by the same name in multiple modules, not two of them can be executed at the same time. If the name is omitted, a default name is assumed.Örnek
Eğer paralel kod içinde mutex kullanmak istersek şöyle yaparız.
Örnek
#pragma omp critical
{
//code only be written from a thread
}
Şöyle yaparız
#include <iostream>
int main(int argc, char** argv)
{
int someVar = 0;
#pragma omp parallel for
for (int i = 0; i < 1000; i++)
{
#pragma omp critical
++someVar;
}
std::cout << someVar << std::endl;
return 0;
}
Eğer OpenMP yerine normal C++ kullanmak istersek şöyle yaparız.#include <iostream>
#include <mutex>
int main(int argc, char** argv)
{
int someVar = 0;
std::mutex someVar_mutex;
#pragma omp parallel for
for (int i = 0; i < 1000; i++)
{
std::lock_guard<std::mutex> lock(someVar_mutex);
++someVar;
}
std::cout << someVar << std::endl;
return 0;
}
Hiç yorum yok:
Yorum Gönder