ВУЗ:
Составители:
220
Несмотря на то, что pthread_cancel может завершить поток досроч-
но, ее нельзя назвать средством принудительного завершения потоков.
В теле функции потока можно не только самостоятельно выбрать поря-
док завершения в ответ на вызов pthread_cancel, но и вовсе игнориро-
вать этот вызов. Поэтому вызов функции pthread_cancel следует рас-
сматривать как запрос на выполнение досрочного завершения потока.
Функция pthread_setcancelstate определяет, будет ли поток реагиро-
вать на обращение к нему с помощью pthread_cancel или не будет. Сиг-
натура функции имеет вид
int pthread_setcancelstate(int state, int* oldstate)
Аргумент state может принимать два значения:
PTHREAD_CANCEL_DISABLE – запрет завершения потока;
PTHREAD_CANCEL_ENABLE – разрешение на завершение потока.
Во второй аргумент oldstate записывается указатель на предыдущее
значение аргумента state. С помощью функции pthread_setcancelstate
можно указывать участки кода потока, во время исполнения которых
поток нельзя завершить вызовом функции pthread_cancel:
//...
// участок функции, который можно досрочно завершить
//...
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
//...
// участок функции, который нельзя досрочно завершить
//...
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
//...
// участок функции, который можно досрочно завершить
//...
Функция pthread_testcancel создает точку возможного досрочного
завершения потока (точку отмены). Такие точки необходимы для кор-
ректного завершения потока, т. к. даже если досрочное завершение раз-
решено, поток, получивший запрос на досрочное завершение, часто мо-
жет завершить работу не сразу. Если поток находится в режиме отло-
женного досрочного завершения (именно этот режим установлен по
умолчанию), он выполнит запрос на досрочное завершение, только до-
стигнув одной из точек отмены. Сигнатура функции pthread_testcancel
Страницы
- « первая
- ‹ предыдущая
- …
- 218
- 219
- 220
- 221
- 222
- …
- следующая ›
- последняя »
