2012-04-02 1048 views
24

我一直在追踪与strace的进程,并看到条目,如:FUTEX_WAIT和FUTEX_WAIT_PRIVATE有什么区别?

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

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

+1

难道这与[this?]有关(http://lwn.net/Articles/229668/) – 2012-04-02 21:03:47

回答

29

这是由linux/glibc完成的优化,以便在进程之间不共享futex时更快。 glibc就可以使用_PRIVATE版本每个futex的电话,除非PTHREAD_PROCESS_SHARED属性设置你的互斥

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

为您调试的目的,你可以忽略_PRIVATE后缀