FUTEX_WAIT和FUTEX_WAIT_PRIVATE有什么区别?

时间:2012-04-02 21:00:44

标签: linux strace futex

我一直在用strace跟踪一个进程,并看到过如下条目:

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

但是,当我查看man page for futex时,我只看到FUTEX_WAITFUTEX_WAKE等条目。所以我的问题是在我的strace输出中附加到这些名称末尾的_PRIVATE是什么意思?例如,在futex手册页中记录的FUTEX_WAKE和我在strace输出中看到的FUTEX_WAKE_PRIVATE之间有什么区别,或者我可以假设它们在我试图理解时是相同的我正在调试的程序发生了什么。

1 个答案:

答案 0 :(得分:33)

这是linux / glibc完成的一项优化,可以在进程之间不共享futex时更快。除非在您的互斥锁上设置_PRIVATE属性,否则Glibc将使用每个互斥锁调用的PTHREAD_PROCESS_SHARED版本

这里有更详细的解释:http://lwn.net/Articles/229668/

出于调试目的,您可以忽略_PRIVATE后缀