我有两个C代码在2个不同的核心上运行.它们都写入同一个文件.
如何使用OpenMP并确保没有崩溃?
解决方法:
您需要OMP_SET_LOCK / OMP_UNSET_LOCK函数:https://computing.llnl.gov/tutorials/openMP/#OMP_SET_LOCK.基本上:
omp_lock_t writelock;
omp_init_lock(&writelock);
#pragma omp parallel for
for ( i = 0; i < x; i++ )
{
// some stuff
omp_set_lock(&writelock);
// one thread at a time stuff
omp_unset_lock(&writelock);
// some stuff
}
omp_destroy_lock(&writelock);
虽然特定的API调用是不同的,但大多数锁定例程(如pthreads信号量和sysv信号量)都适用于这种逻辑.