我有一個使用Pthread和OpenMP的程序。基本上,使用Pthreads創建2個線程(線程A和B),在線程A中,OpenMP用於並行化for循環。在OpenMP和Pthread中使用鎖定
如果我有一個由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
}
}
謝謝。