2012-04-02 26 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後綴