2012-04-02 19 views
24

mi sono state tracciando un processo con strace e hanno visto voci quali: vociQual è la differenza tra FUTEX_WAIT e FUTEX_WAIT_PRIVATE?

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

Tuttavia, quando ho guardato il man page for futex ho solo visto come FUTEX_WAIT e FUTEX_WAKE. Quindi la mia domanda è: cosa significa _PRIVATE che viene aggiunto alla fine di questi nomi nel mio output strace? Per esempio c'è qualche differenza tra qualcosa come FUTEX_WAKE che è documentato nella pagina man di futex e FUTEX_WAKE_PRIVATE che vedo nell'output di strace o posso presumere che siano gli stessi quando sto cercando di capire cosa sta succedendo con il programma che sto debug.

+1

Potrebbe avere qualcosa a che fare con [questo?] (http://lwn.net/Articles/229668/) –

risposta

29

Questa è una ottimizzazione eseguita da linux/glibc per rendere i futex più veloci quando non sono condivisi tra i processi. Glibc utilizzerà i _PRIVATE versioni di ciascuna delle chiamate futex a meno che l'attributo PTHREAD_PROCESS_SHARED è impostato sul mutex

E 'spiegato in dettaglio qui: http://lwn.net/Articles/229668/

Ai fini del vostro debugging, si può semplicemente ignorare il _PRIVATE suffissi