Дескрипторы, задержка и выход

Опубликовано в Технологии > Серверные технологии

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

Подберем нужное. С нами асболента каждому будет доступна. Аналогичным образом, хотя некоторые функции операционной системы оказывают влияние только на вызывающий поток, другие влияют на весь процесс. Например, если один из потоков выполнил вызов блокирующейся функции ввода/вывода (например, функции read), то блокируется только один поток. Однако если любой из потоков вызовет функцию exit, немедленно происходит завершение всего процесса. Это означает, что функция exit связана с процессом, а не с отдельным потоком.

Хотя некоторые системные функции оказывают влияние только на вызывающий поток, другие функции, такие как exit, влияют на весь процесс.

12.6. Завершение работы потока

Если в потоке нельзя вызвать функцию exit, не завершив всего процесса, то как может поток прекратить свою работу, не останавливая выполнение других потоков в процессе? Для этого могут применяться два способа. Во-первых, работа потока прекращается, если он выполняет возврат из своей процедуры верхнего уровня (т.е. процедуры, с которой началось его выполнение). Во-вторых, для завершения работы потока может быть вызвана функция pthread_exit.

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

Похожие статьи