8.5. Отмена выполнения потоков

8.5. Отмена выполнения потоков

Обсуждая листинг 8.4, мы обратили внимание на наличие проблемы, возникающей при отмене выполнения потока, заблокированного вызовом pthread_cond_wait. Выполнение потока может быть отменено в том случае, если какой-нибудь другой поток вызовет функцию pthread_cancel, единственным аргументом которой является идентификатор потока, выполнение которого должно быть отменено:

#include <pthread.h>

int pthread_cancel(pthread_t tid);

/* Возвращает 0 в случае успешного завершения, положительное значение Еххх –в случае ошибки */

Отмена выполнения может быть использована в том случае, если несколько потоков начинают работу над какой-то задачей (например, поиск записи в базе данных) и один из них завершает работу раньше всех остальных. Тогда он может отменить их выполнение. Другим примером является обнаружение ошибки одним из одновременно выполняющих задачу потоков, который затем может отменить выполнение и всех остальных.

Для обработки отмены выполнения поток может установить (push) или снять (pop) обработчик-очиститель (cleanup handler):

#include <pthread.h>

void pthread_cleanup_push(void (*function) (void *) void *arg);

void pthread_cleanup_pop(int execute);

Эти обработчики представляют собой обычные функции, которые вызываются:

? в случае отмены выполнения потока (другим потоком, вызвавшим pthread_ cancel);

? в случае добровольного завершения работы (вызовом pthread_exit или выходом из начальной функции потока).

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

Аргумент function представляет собой адрес вызываемой функции, а arg — ее единственный аргумент. Функция pthread_cleanup_pop всегда удаляет обработчик из верхушки стека и вызывает эту функцию, если значение execute отлично от 0.

ПРИМЕЧАНИЕ

Мы снова встретимся с проблемой отмены выполнения потоков в связи с листингом 15.26, где может произойти отмена выполнения сервера с дверьми при завершении работы клиента в процессе обработки вызванной им процедуры. 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Отмена ошибочных действий

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

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


Отмена и повторение изменений

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Отмена и повторение изменений Многие действия, произведенные над проектом, можно отменить. Выполняется это с помощью команды меню Монтаж ? Отменить <действие>. Вместо <действие> после слова Отменить в названии пункта меню записано, какое конкретно действие будет


Отмена объектной привязки

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Отмена объектной привязки Snap to None – режим отмены всех текущих и разовых режимов объектной


Отмена действия

Из книги 3ds Max 2008 для дизайна интерьеров автора Семак Рита

Отмена действия Если вы выполнили ненужное или неправильное действие, например случайно удалили объект, то можете отменить ошибочное действие. Для этого предназначена кнопка Undo (Возврат) на главной панели инструментов. Каждый щелчок на ней позволяет последовательно


Приоритеты процессов и потоков и планирование выполнения

Из книги Системное программирование в среде Windows автора Харт Джонсон М

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


Безопасная отмена выполнения потоков

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Безопасная отмена выполнения потоков Обсуждение предыдущего примера продемонстрировало, как безопасно отменить выполнение целевого потока, который использует состояния дежурного ожидания. Несмотря на использование АРС, такую отмену выполнения иногда называют


Стеки потоков и допустимые количества потоков

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

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


Отмена выполнения операций перекрывающегося ввода/вывода

Из книги QNX/UNIX [Анатомия параллелизма] автора Цилюрик Олег Иванович

Отмена выполнения операций перекрывающегося ввода/вывода Булевская функция CancelIO позволяет отменить выполнение незавершенных операций перекрывающегося ввода/вывода, связанных с указанным дескриптором (у этой функции имеется всего лишь один параметр). Отменяется


13.2.3. Отмена отображения областей

Из книги AutoCAD 2009. Учебный курс автора Соколова Татьяна Юрьевна

13.2.3. Отмена отображения областей После окончания отображения в памяти процесс может отменить отображение памяти с помощью munmap(). Это приводит к тому, что последующие доступы к этому адресу будут генерировать SIGSEGV (если только память не будет перераспределена) и сохраняет


Отмена открытого ключа.

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

Отмена открытого ключа. Предположим, что ваш секретный ключ и фраза пароля каким-то образом были скомпрометированы. Вы должны сообщить об этом миру, чтобы никто более не использовал ваш открытый ключ. Для этого вы должны выпустить удостоверение отмены ключа для отмены


Уничтожение (отмена) потока

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Уничтожение (отмена) потока Корректное завершение выполняющегося потока «извне», из другого потока (то есть асинхронно относительно прерываемого потока), — задача отнюдь не тривиальная; она намного сложнее аналогичной задачи прерывания процесса. Это связано с


Отмена объектной привязки

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Отмена объектной привязки Snap to None – режим отмены всех текущих и разовых режимов объектной


Отмена объектной привязки

Из книги Как приручить компьютер за несколько часов автора Ремнева Ирина

Отмена объектной привязки Snap to None – режим отмены всех текущих и разовых режимов объектной


Отмена полномочий

Из книги автора

Отмена полномочий Оператор REVOKE требуется для удаления полномочий, назначенных операторами GRANT. Согласно стандарту, REVOKE должен каскадом отменить все привилегии, полученные всеми пользователями как результат WITH GRANT OPTION от данного пользователя. Однако вам не следует на это


4.2. Отмена потока

Из книги автора

4.2. Отмена потока Обычно поток завершается при выходе из потоковой функции или вследствие вызова функции pthread_exit(). Но существует возможность запросить из одного потока уничтожение другого. Это называется отменой, или принудительным завершением, потока.Чтобы отменить


Отмена выполненного действия

Из книги автора

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