在OpenMP和Pthread中使用锁
|
我有一个同时使用Pthreads和OpenMP的程序。基本上,使用Pthread创建2个线程(线程A和B)来工作,在线程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
}
}
谢谢。
没有找到相关结果
已邀请:
2 个回复
熊融炭臀陛
程琶