Посмотрите на справочную страницу для pthread_cancel
:
Когда выполняется запрошенное аннулирование, для потока выполняются следующие шаги (в этом порядке):
1. Cancellation clean-up handlers are popped (in the reverse of the order in
which they were pushed) and called. (See pthread_cleanup_push(3).)
2. Thread-specific data destructors are called, in an unspecified order. (See
pthread_key_create(3).)
3. The thread is terminated. (See pthread_exit(3).)
Таким образом, вы можете использовать pthread_cancel
со своего основного устройства, при условии, что вы правильно зарегистрировали обработчики очистки, используя вышеуказанные функции.содержит много важной информации.)
Редактировать : (из комментариев) Если вы планируете использовать PTHREAD_CANCEL_DEFERRED
и вам нужно вставить точку отмены где-нибудь в вашем коде, тогда используйте pthread_testcancel
.Эта функция проверяет, была ли отменена заявка.Если это так, отмена обслуживается (т. Е. Этот вызов никогда не возвращается).В противном случае это не имеет никакого эффекта.