开发静态链接库时,如何使用 OpenMP 保护访问共享数据的代码免受数据争用?
如果我只是在需要顺序运行的部分上使用#pragma omp critical
,那么如果库的客户端使用不同的线程实现(例如pthreads),我会没事吗?关键部分是否作为互斥体编译到库中?
最佳答案
查看latest OpenMP specification ,它指出“关键”确保一次只有“争用组”中的一个线程执行该 block 。根据我的理解,争用组的定义仅涵盖 OpenMP 线程。因此,从技术上讲,OpenMP 实现的编写方式可以使 ritic
无法与其他线程库一起使用。
关于c - 编写库时使用 OpenMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52957645/