Вызывает ли Sleep () из pthread поток в сон или процесс? - PullRequest
11 голосов
/ 31 мая 2011

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

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

SYNOPSIS #include

   unsigned int sleep(unsigned int seconds);

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

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

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

Спасибо.

Ответы [ 3 ]

10 голосов
/ 31 мая 2011

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

1 голос
/ 22 октября 2016

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

Короче говоря, nanosleep - этоЯ думаю, хорошо, но sleep нет.Страница man nanosleep на kernel.org не говорит, является ли nanosleep поточно-ориентированной, но gcc sleep docs говорит, что это так.

1 голос
/ 31 мая 2011

На моем компьютере с 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) только там для справки.

...