如果每个线程在虚拟内存的不同区域运行,可以从独立执行OpenMP或Posix线程安全地调用mlock()吗?它是否会创建系统范围的同步障碍或强制所有线程以某种方式停止?
如果这是重复,我道歉;当谷歌搜索“mlock openmp”/“mlock thread safety”没有立即回答时,我感到很惊讶。我能找到的最接近的是Non-blocking mlock()的第二个答案,这似乎表明mlock()可以从不同的线程调用,并且不强制执行或需要任何同步障碍。
答案 0 :(得分:1)
mlock()
可以安全地同时从多个线程调用。
关于它是否与mlock()
的其他来电同步,它是一个实施质量问题 - 原则上任何系统调用都可以与其他任何系统调用同步,其中&# 39; POSIX中没有禁止它的文本。在实践中,您经常会发现在进程的内存映射上工作的系统调用往往相互竞争(因此mlock()
可能不仅仅与其他mlock()
调用竞争,而且{{1} }})。您将需要测试以查看争用是否是您的用例中的实际问题。