В чем разница между FUTEX_WAIT и FUTEX_WAIT_PRIVATE?

Я отслеживал процесс с помощью strace и видел такие записи, как:

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

Однако когда я просматривал справочную страницу futex, я видел только такие записи, как FUTEX_WAIT и FUTEX_WAKE. Итак, мой вопрос: что означает _PRIVATE, добавленное к концу этих имен в моем выводе strace? Например, есть ли какая-либо разница между чем-то вроде FUTEX_WAKE, который задокументирован на странице руководства futex, и FUTEX_WAKE_PRIVATE, который я вижу в выводе strace, или я могу предположить, что они одинаковы, когда я пытаюсь понять, что происходит с программой, которую я использую? отладка.


person Gabriel Southern    schedule 02.04.2012    source источник
comment
Может ли это быть как-то связано с этим?   -  person Robert Harvey    schedule 03.04.2012


Ответы (1)


Это оптимизация, сделанная linux/glibc, чтобы сделать фьютексы быстрее, когда они не распределяются между процессами. Glibc будет использовать версии _PRIVATE каждого вызова фьютекса, если для вашего мьютекса не установлен атрибут PTHREAD_PROCESS_SHARED.

Более подробно это объясняется здесь: http://lwn.net/Articles/229668/

В целях отладки вы можете просто игнорировать суффиксы _PRIVATE

person je4d    schedule 02.04.2012