В чем разница между FUTEX_WAIT и FUTEX_WAIT_PRIVATE? - PullRequest
26 голосов
/ 03 апреля 2012

Я отслеживал процесс с помощью 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, или я могу предположить, что они совпадают, когда я пытаюсь понять, что происходит спрограмма, которую я отлаживаю.

1 Ответ

34 голосов
/ 03 апреля 2012

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

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

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

...