2012-04-02 14 views
24

I han sido rastreo de un proceso con strace y han visto entradas tales como: entradas¿Cuál es la diferencia entre FUTEX_WAIT y FUTEX_WAIT_PRIVATE?

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

Sin embargo, cuando miraba a la man page for futex Sólo he visto como FUTEX_WAIT y FUTEX_WAKE. Entonces mi pregunta es ¿qué significa _PRIVATE que se agrega al final de estos nombres en mi salida de salida? Por ejemplo, ¿hay alguna diferencia entre algo como FUTEX_WAKE que está documentado en la página de manual de futex y FUTEX_WAKE_PRIVATE que veo en la salida de strace o puedo suponer que son los mismos cuando intento entender qué está pasando con el programa que soy depuración

+1

¿Podría tener algo que ver con [esto?] (http://lwn.net/Articles/229668/) –

Respuesta

29

Esta es una optimización realizada por linux/glibc para hacer futexes más rápidos cuando no se comparten entre procesos. Glibc usará las versiones _PRIVATE de cada una de las llamadas futex menos que el atributo PTHREAD_PROCESS_SHARED se establece en el mutex

Se explica con más detalle aquí: http://lwn.net/Articles/229668/

A los efectos de su depuración, puede simplemente ignorar el _PRIVATE sufijos

Cuestiones relacionadas