Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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