ечены как часть опций Threads и Thread Execution Scheduling.
Условие ошибки [ENOSYS] было удалено, поскольку в заглушках нет необходимости, если реализация не поддерживает опцию Thread Execution Scheduling.
В целях согласования со стандарто м IEEE Std 1003.1d-1999 была добавлена стратегия планирования SCHED_SPORADIC.
В целях согласования со стандарто м ISO/IEC 9899: 1999 в прототип функции pthread_attr_getschedpolicy () было добавлено ключевое слово restrict.
Имя
pthread_cancel — функция от м ены выполнения потока.
Синопсис
THR #include
int pthread_cancel (pthread_t thread);
Описание
Функция pthread_cancel () создает запрос на отмену потока. Когда именно отмена вступит в силу, зависит от текущего состояния потока, заданного параметром thread, и его типа. При от м ене потока должны быть вызваны обработчики, выполняющие подготовительные действия, связанные с отменой потока. По завершении последнего обработчика должны быть вызваны деструкторы объектных данных, используемых отменяемым потоком. По завершении последнего деструктора поток, заданный пара м етро м thread, должен завершиться.
Действия, связанные с от м еной заданного потока, выполняются асинхронно по отношению к потоку, вызывающему функцию pthread_cancel ().
Возвращаемое значение
При успешном завершении функция pthread_cancel () возвращает нулевое значение; в противном случае — код ошибки, обозначающий ее характер.
Ошибки
Функция pthread_cancel () м ожет завершиться неудачно, если:
[ESRCH] не удалось найти поток, иде н тификационный но м ер (ID) которого соответствовал бы заданно м у.
Функция pthread_cancel () не возвра щ ает код ошибки [EINTR].
Примеры
Отсутствуют.
Замечания по использованию
Отсутствуют.
Логическое обоснование
Для отправки потоку уведо м ления об от м ене расс м атривалось два альтернативных варианта. Для одного предполагалось определить новый сигнал SIGCANCEL с соответствующей семантикой отмены, а для другого— новую функцию pthread_cancel (), которая бы приводила в действие процедуру отмены потока.
Преимущество варианта, прелусматривающего создание нового сигнала, состояло в том, что критерии его выдачи были бы во многом идентичны тем, которые использовались при попытке выдать любой другой сигнал, поэтому сигнальный механизм уведомления об отмене казался унифицированным. И в самом деле, во многих реализациях отмена потоков осуществляется посредством специального сигнала. Однако до сих пор не существовало ни одной сигнальной функции (за исключением функции pthread_kill()), которую можно было бы использовать совместно с этим новым сигналом, поскольку поведение выдаваемого сигнала отмены должно было отличаться от поведения любого из уже определенных сигналов.