Linux mlock()和线程

Linux mlock()和线程,linux,pthreads,openmp,mmap,Linux,Pthreads,Openmp,Mmap,如果每个线程都在不同的虚拟内存区域上运行,那么可以从独立执行的OpenMP或Posix线程安全地调用mlock()?它是否会造成系统范围的同步障碍,或者以某种方式强制所有线程暂停 如果这是重复的,我道歉;当谷歌搜索“mlock openmp”/“mlock线程安全性”时,我感到惊讶,但没有立即找到答案。我能找到的最接近的答案是的第二个答案,它似乎表明可以从单独的线程调用mlock(),并且不强制执行或需要任何同步障碍。mlock()一次从多个线程调用是安全的 至于它是否与对mlock()的其他调

如果每个线程都在不同的虚拟内存区域上运行,那么可以从独立执行的OpenMP或Posix线程安全地调用mlock()?它是否会造成系统范围的同步障碍,或者以某种方式强制所有线程暂停

如果这是重复的,我道歉;当谷歌搜索“mlock openmp”/“mlock线程安全性”时,我感到惊讶,但没有立即找到答案。我能找到的最接近的答案是的第二个答案,它似乎表明可以从单独的线程调用mlock(),并且不强制执行或需要任何同步障碍。

mlock()
一次从多个线程调用是安全的

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

mlock()
一次从多个线程调用是安全的


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

我在这里的线程不安全函数列表中没有看到
mlock()
:所以它应该是安全的。谢谢!这是否意味着mlock也不会导致线程之间的隐式同步?不,
mlock()
不在这里的异步安全函数列表中,因此它可以在需要时使用锁。这样的锁将是叶级锁,因此不会使函数线程不安全,因为它无法参与死锁。那么您是说,是的,在一个线程中调用mlock()原则上会导致其他线程在调用mlock()时暂停,直到第一个线程的调用完成?“基本上我搞砸了,我还不如用串行代码?”…基本上我搞砸了,我还不如用串行代码?”正在调用
mlock()?!在我看来,这有点像过早的优化。我没有在这里的线程不安全函数列表中看到
mlock()
:所以它应该是安全的。谢谢!这是否意味着mlock也不会导致线程之间的隐式同步?不,
mlock()
不在这里的异步安全函数列表中,因此它可以在需要时使用锁。这样的锁将是叶级锁,因此不会使函数线程不安全,因为它无法参与死锁。那么您是说,是的,在一个线程中调用mlock()原则上会导致其他线程在调用mlock()时暂停,直到第一个线程的调用完成?“基本上我搞砸了,我还不如用串行代码?”…基本上我搞砸了,我还不如用串行代码?”正在调用
mlock()?!在我看来,这有点像过早的优化。