Книга: Программирование для Linux. Профессиональный подход
4.2.1. Синхронные и асинхронные потоки
4.2.1. Синхронные и асинхронные потоки
Асинхронно отменяемый поток "свободен" в любое время. Синхронно отменяемый поток, наоборот, бывает "свободным", только когда ему "удобно". Соответствующие места в программе называются точками отмены. Запрос на отмену помещается в очередь и находится в ней до тех пор, пока поток не достигнет следующей точки отмены.
Чтобы сделать поток асинхронно отменяемым, воспользуйтесь функцией pthread_setcanceltype()
. Эта функция влияет на тот поток, в котором она была вызвана. Первый ее аргумент должен быть PTHREAP_CANCEL_ASYNCHRONOUS
в случае асинхронных потоков и PTHREAD_CANCEL_DEFERRED
— в случае синхронных потоков. Второй аргумент — это указатель на переменную, в которую записывается предыдущее состояние потока.
Вот как можно сделать поток асинхронным:
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
Что такое точка отмены и где она должна находиться? На этот вопрос нельзя дать прямой ответ. Точка отмены создается с помощью функции pthread_testcancel()
. Все, что она делает, — это обрабатывает отложенный запрос на отмену в синхронном потоке. Ее следует периодически вызывать в потоковой функции в ходе длительных вычислений, там, где поток можно завершить без риска потери ресурсов или других побочных эффектов.
Некоторые функции неявно создают точки отмены. О них можно узнать на man
-странице, посвященной функции pthread_cancel()
. Учтите, что они могут вызываться в других функциях, которые, тем самым, косвенно станут точками отмены.
- Асинхронные вызовы процедур
- В каких случаях следует использовать фоновые потоки
- Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
- 1.2 Процесс, контекст процесса и потоки
- Потоки в пространстве ядра
- Структура mm_struct и потоки пространства ядра
- ГЛABA 6 Процессы, потоки и задания
- ГЛАВА 7 Потоки и планирование выполнения
- Процессы и потоки Windows
- Удаленные потоки
- Потоки и производительность
- Облегченные потоки