我一直在用strace跟踪一个进程,并看到过如下条目:
futex(0x7ffff79b3e00, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7ffff79b3e00, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
但是,当我查看man page for futex时,我只看到FUTEX_WAIT
和FUTEX_WAKE
等条目。所以我的问题是在我的strace输出中附加到这些名称末尾的_PRIVATE
是什么意思?例如,在futex手册页中记录的FUTEX_WAKE
和我在strace输出中看到的FUTEX_WAKE_PRIVATE
之间有什么区别,或者我可以假设它们在我试图理解时是相同的我正在调试的程序发生了什么。
答案 0 :(得分:33)
这是linux / glibc完成的一项优化,可以在进程之间不共享futex时更快。除非在您的互斥锁上设置_PRIVATE
属性,否则Glibc将使用每个互斥锁调用的PTHREAD_PROCESS_SHARED
版本
这里有更详细的解释:http://lwn.net/Articles/229668/
出于调试目的,您可以忽略_PRIVATE
后缀