Linux 将pthread_canelState设置为pthread_CANCEL_是否会禁用排队取消请求?

Linux 将pthread_canelState设置为pthread_CANCEL_是否会禁用排队取消请求?,linux,pthreads,Linux,Pthreads,我试图理解Posix线程。在pthread_cancel()的手册页中,提到“由pthread_setcancelstate()确定的线程可取消状态可以启用或禁用。如果线程已禁用取消,则取消请求将保持排队状态,直到线程启用取消 但是当我阅读关于线程取消点的文章时,有人提到,如果我们将cancel类型设置为disabled(uncancellable),取消请求就会被悄悄地忽略 如果我们将取消类型设置为禁用,任何人都可以告诉我取消请求是排队还是被忽略吗?POSIX线程通过两个二进制变量的组合来控制

我试图理解Posix线程。在pthread_cancel()的手册页中,提到“由pthread_setcancelstate()确定的线程可取消状态可以启用或禁用。如果线程已禁用取消,则取消请求将保持排队状态,直到线程启用取消

但是当我阅读关于线程取消点的文章时,有人提到,如果我们将cancel类型设置为disabled(uncancellable),取消请求就会被悄悄地忽略


如果我们将取消类型设置为禁用,任何人都可以告诉我取消请求是排队还是被忽略吗?

POSIX线程通过两个二进制变量的组合来控制线程取消: 取消状态和取消类型。相关函数分别为pthread\u setcancelstate()pthread\u setcanceltype()。 当状态设置为禁用时,取消请求将被忽略。 它不会被抛出,而是被挂起(或者正如您正确写的“排队”),直到状态设置回enabled。由于状态为enabled,操作系统将根据取消类型启动取消过程。如果您有一个必须在线程取消前执行的代码(例如内存取消分配等),您可以在输入代码之前将线程取消状态设置为禁用,并在退出代码时启用取消。第二个问题是线程如何以及何时真正停止(取消)。取消类型回答此问题。如果类型设置为(不推荐)异步,取消可能发生在最近的指令上。如果类型设置为默认的延迟取消,则取消将发生在下一个“取消点”,即检查线程取消状态并终止线程的POSIX函数