FUTEX_WAIT和FUTEX_WAIT_PRIVATE有什么区别?

40

我一直在使用strace跟踪一个进程,并看到了以下条目:

futex(0x7ffff79b3e00, FUTEX_WAKE_PRIVATE, 1) = 1                                                                
futex(0x7ffff79b3e00, FUTEX_WAIT_PRIVATE, 2, NULL) = 0 

然而,当我查看futex的man页面时,我只看到了FUTEX_WAITFUTEX_WAKE等条目。因此,我的问题是,我的strace输出中附加在这些名称末尾的_PRIVATE是什么意思?例如,像在futex man页面中记录的FUTEX_WAKE和我在strace输出中看到的FUTEX_WAKE_PRIVATE之间是否有任何区别?在我尝试理解我正在调试的程序发生了什么时,我能否假设它们相同?


1
可能与这个有关吗? - Robert Harvey
1个回答

46
这是Linux/Glibc进行的一种优化,使得当futexes(快速用户空间锁)不在进程之间共享时它们变得更快。 除非在您的互斥锁上设置了“PTHREAD_PROCESS_SHARED”属性,否则Glibc将使用每个futex调用的“_PRIVATE”版本。 这里有更详细的解释:http://lwn.net/Articles/229668/
对于您的调试目的,您可以忽略后缀“_PRIVATE”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接