web-dev-qa-db-fra.com

Quelle est la différence entre FUTEX_WAIT et FUTEX_WAIT_PRIVATE?

J'ai suivi un processus avec strace et j'ai vu des entrées telles que:

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

Cependant, quand j'ai regardé la page de manuel pour futex je n'ai vu que des entrées telles que FUTEX_WAIT et FUTEX_WAKE. Ma question est donc de savoir ce que _PRIVATE qui est ajouté à la fin de ces noms dans ma moyenne de sortie strace? Par exemple, y a-t-il une différence entre quelque chose comme FUTEX_WAKE qui est documenté dans la page de manuel futex et FUTEX_WAKE_PRIVATE que je vois dans la sortie strace ou puis-je supposer que ce sont les mêmes lorsque j'essaie de comprendre ce qui se passe avec le programme que je débogue.

28
Gabriel Southern

Il s'agit d'une optimisation effectuée par linux/glibc pour accélérer les futex lorsqu'ils ne sont pas partagés entre les processus. Glibc utilisera le _PRIVATE versions de chacun des appels futex à moins que PTHREAD_PROCESS_SHARED l'attribut est défini sur votre mutex

C'est expliqué plus en détail ici: http://lwn.net/Articles/229668/

Aux fins de votre débogage, vous pouvez simplement ignorer le _PRIVATE suffixes

34
je4d