Pthread와 OpenMP를 모두 사용하는 프로그램이 있습니다. 기본적으로 Pthread를 사용하여 2 개의 스레드 (스레드 A와 B)가 만들어지고 스레드 A에서는 OpenMP가 for 루프를 병렬화하는 데 사용됩니다.OpenMP 및 Pthreads에서 잠금 사용
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
}
}
감사합니다.