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.
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