Позволяет ли вызов sleep() из pthread помещать поток в режим сна или обрабатывать?

Я видел, что есть вопрос о pthread sleep linux

Однако, когда я посмотрел man-страницу на моей машине linux, я вижу следующее.

СИНТАКСИС        #include

   unsigned int sleep(unsigned int seconds);

ОПИСАНИЕ        sleep() заставляет текущий процесс спать до секунд секунд истекли или        сигнал, который не игнорируется.

Итак, мой вопрос заключается в том, что я хотел бы узнать, какую страницу руководства я должен придерживать, чтобы скрыть поток. Кроме того, если оба они верны, как я могу это контролировать?

Возможно, я могу написать какой-то код для его проверки, но я хочу также получить ответы от других людей.

Спасибо.

Ответ 1

Формулировка на странице вашего человека, скорее всего, неверна. Доверяйте стандарту и доверяйте справочную страницу на kernel.org. Напишите сотруднику документации для вашего дистрибутива и скажите им обновить страницы руководства.

Ответ 2

В моем Linux-ящике есть две справочные страницы о функции сна:

$ man -k sleep
sleep (3)   - Sleep for the specified number of seconds
sleep (3p)  - suspend execution for an interval of time

Первый говорит "текущий процесс", как и ваш.
Второй говорит "вызывающий поток", но его преамбула гласит:

Эта страница руководства является частью руководства для программистов POSIX. Реализация Linux этого интерфейса может отличаться (см. Соответствующую страницу руководства Linux для        детали поведения Linux), или интерфейс не может быть реализован в Linux.

Итак, я заключаю, что sleep(3) описывает фактическое поведение, а sleep(3p) - только для справки.

Ответ 3

Страница руководства, на которую ссылается @cnicutar, говорит, что sleep не является потокобезопасным (может быть, новым с 2011 года?). Интересно, что книга Дейва Бутенхофа 1997 ( "Программирование с помощью потоков Posix" ) включает пример, в котором спит поток с sleep (p18). Это - это старый поток (другой вид) на comp.programming.threads, в котором Butenhof и другие обсуждают nanosleep в контексте pthreads.

Короче говоря, nanosleep, я думаю, хорошо, но sleep нет. Командная страница nanosleep на kernel.org не говорит, является ли nanosleep потокобезопасным, но gcc docs говорят, что это есть.