如果每个线程都在不同的虚拟内存区域上运行,那么可以从独立执行OpenMP或Posix线程中安全地调用mlock()吗?它是否创建了一个系统范围的同步屏障或以某种方式强制所有线程停止?
如果这是重复的话,我很抱歉;当google搜索“mlock openmp/”mlock thread safety”没有立即找到答案时,我很惊讶。我能找到的最接近的是Non-blocking mlock()的第二个答案,它似乎表明可以从单独的线程调用mlock(),并且不强制或要求任何同步屏障。

最佳答案

mlock()可以同时从多个线程调用。
至于它是否与其他mlock()调用同步,这是一个实现质量问题-原则上,任何系统调用都可以与任何其他调用同步,POSIX中没有禁止它的文本。在实践中,您经常会发现,在进程的内存映射上工作的系统调用往往会相互竞争(因此mlock()可能不仅会与其他mlock()调用竞争,而且还会与mmap()调用竞争)。您需要测试争用在您的用例中是否确实是一个问题。

关于linux - mlock()和线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38128769/

10-10 13:40