У меня есть программа, которая использует как Pthreads, так и OpenMP. По сути, 2 потока (потоки A и B) создаются с использованием Pthreads для выполнения работы, а в потоке A OpenMP используется для распараллеливания цикла for.
Если у меня есть глобальная переменная, к которой обращаются потоки OpenMP, а также поток B, могу ли я использовать блокировку в OpenMP, чтобы убедиться, что у меня нет условий гонки?
Что я имею в виду:
int count = 0;
pthread_create(&ThreadA, &attr, WorkA, NULL);
pthread_create(&ThreadB, &attr, WorkB, NULL);
void *WorkA (void *t)
{
#pragma omp parallel for
for (i = 0 ; i < N ; i++)
{
// Do some work
#pragma omp critical
{
// Do some other work
OMP_SET_LOCK(&lock);
count++;
OMP_UNSET_LOCK(&lock);
}
}
}
void *WorkB (void *t)
{
if (count > 0)
{
OMP_SET_LOCK(&lock);
count--;
OMP_UNSET_LOCK(&lock);
// Do some work
}
}
Спасибо.