Всем привет, не подскажите что происходит и как ведёт себя код в такой ситуации: есть запрос на завершение потока и следующий фрагмент кода:
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &OldS);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &OldT);
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &OldT);
usleep(1000*1000);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &OldS);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &OldT);
этот код как бы игнорирует вызов pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &OldT);
и завершается при вызове usleep как и должно было бы быть без pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &OldT); Не подскажите чем вызвано такое поведение? Понятное дело что я чегото не понимаю но по идее на момент выполнения usleep все запросы на завершения игнорируются а после устанавливаются на отсроченный и поток завершается либо на вызове testcancel либо по завершении своей задачи.