¿Cuál es la diferencia entre FUTEX WAIT y FUTEX WAIT PRIVATE?


He estado rastreando un proceso con strace y he visto entradas como:

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

Sin embargo, cuando miré la página de manual de para futex solo he visto entradas como FUTEX_WAIT y FUTEX_WAKE. Así que mi pregunta es ¿qué significa _PRIVATE que se añade al final de estos nombres en mi salida de strace? 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 asumir que son los lo mismo cuando estoy tratando de entender lo que está sucediendo con el programa que estoy depurando.

Author: Gabriel Southern, 2012-04-03

1 answers

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

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

Para los propósitos de su depuración, simplemente puede ignorar los sufijos _PRIVATE

 31
Author: je4d,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-02 21:10:48