mlock() 和线程

mlock() and Threading

假设每个线程都在不同的虚拟内存区域上运行,是否可以从独立执行的 OpenMP 或 Posix 线程中安全地调用 mlock()?它会创建系统范围的同步屏障还是会强制所有线程以某种方式停止?

如果这是重复的,我深表歉意;当 google 搜索 "mlock openmp"/"mlock thread safety" 没有立即找到答案时,我感到很惊讶。我能找到的最接近的是 Non-blocking mlock() 的第二个答案,它似乎表明 mlock() 可以从单独的线程调用并且不强制或不需要任何同步障碍。

mlock() 可以安全地同时从多个线程调用。

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