2012-04-02 10 views
24

I zostały śledzenie procesu z strace i widziałem wpisy takie jak:Jaka jest różnica między FUTEX_WAIT i FUTEX_WAIT_PRIVATE?

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

Jednak, kiedy spojrzał na man page for futex Mam tylko widziałem wpisów takich jak FUTEX_WAIT i FUTEX_WAKE. Więc moje pytanie brzmi, co oznacza, że ​​_PRIVATE dołączana do końca tych nazw w mojej wartości wyjściowej strace? Na przykład czy istnieje jakaś różnica między czymś w rodzaju FUTEX_WAKE, która jest udokumentowana na stronie man futex i FUTEX_WAKE_PRIVATE, którą widzę w wyjściu strace lub czy mogę założyć, że są one takie same, gdy próbuję zrozumieć, co dzieje się z programem, który jestem debugowanie.

+1

Czy to może mieć coś wspólnego z [this?] (http://lwn.net/Articles/229668/) –

Odpowiedz

29

Jest to optymalizacja przeprowadzana przez linux/glibc w celu zwiększenia prędkości futexa, gdy nie są one dzielone między procesami. Glibc użyje _PRIVATE wersje każdego z połączeń futex chyba atrybut PTHREAD_PROCESS_SHARED jest ustawiony na mutex

Jest to wyjaśnione bardziej szczegółowo tutaj: http://lwn.net/Articles/229668/

Dla celów swojej debugowania, można po prostu zignorować _PRIVATE sufiksy

Powiązane problemy