mlock() 和线程
mlock() and Threading
假设每个线程都在不同的虚拟内存区域上运行,是否可以从独立执行的 OpenMP 或 Posix 线程中安全地调用 mlock()?它会创建系统范围的同步屏障还是会强制所有线程以某种方式停止?
如果这是重复的,我深表歉意;当 google 搜索 "mlock openmp"/"mlock thread safety" 没有立即找到答案时,我感到很惊讶。我能找到的最接近的是 Non-blocking mlock() 的第二个答案,它似乎表明 mlock() 可以从单独的线程调用并且不强制或不需要任何同步障碍。
mlock()
可以安全地同时从多个线程调用。
至于它是否与对 mlock()
的其他调用同步,这是一个实施质量问题 - 原则上 any 系统调用可以与任何其他系统调用同步, POSIX 中没有禁止它的文本。在实践中,您经常会发现在进程的内存映射上工作的系统调用往往会相互竞争(因此 mlock()
可能不仅会与其他 mlock()
调用竞争,还会与 mmap()
竞争)。您将需要测试以查看在您的用例中争用是否真的是一个问题。
假设每个线程都在不同的虚拟内存区域上运行,是否可以从独立执行的 OpenMP 或 Posix 线程中安全地调用 mlock()?它会创建系统范围的同步屏障还是会强制所有线程以某种方式停止?
如果这是重复的,我深表歉意;当 google 搜索 "mlock openmp"/"mlock thread safety" 没有立即找到答案时,我感到很惊讶。我能找到的最接近的是 Non-blocking mlock() 的第二个答案,它似乎表明 mlock() 可以从单独的线程调用并且不强制或不需要任何同步障碍。
mlock()
可以安全地同时从多个线程调用。
至于它是否与对 mlock()
的其他调用同步,这是一个实施质量问题 - 原则上 any 系统调用可以与任何其他系统调用同步, POSIX 中没有禁止它的文本。在实践中,您经常会发现在进程的内存映射上工作的系统调用往往会相互竞争(因此 mlock()
可能不仅会与其他 mlock()
调用竞争,还会与 mmap()
竞争)。您将需要测试以查看在您的用例中争用是否真的是一个问题。