我正在努力理解Posix线程。在pthread_cancel()的手册页中提到,可以启用或禁用由pthread_setcancelstate()确定的线程的可取消状态。如果一个线程禁用了取消,那么取消请求将一直排队直到线程启用取消。
但是,当我在http://www.makelinux.net/alp/029上阅读线程取消点时,有人提到,如果我们将cancel类型设置为禁用(不可取消),则取消请求将被悄然忽略。
如果我们将取消类型设置为禁用,请让我知道取消请求是否正在排队或被忽略?
发布于 2014-07-12 22:48:15
POSIX线程通过组合两个二进制变量来控制线程取消:取消状态和取消类型。相应地,相关函数是pthread_setcancelstate()和pthread_setcanceltype()。当状态设置为禁用时,取消请求将被忽略。它不会被抛出,它会被挂起(或者正如您正确地写的那样--“排队”),直到状态被设置为已启用。由于启用了状态,操作系统将根据取消类型启动取消进程。如果您有一个必须在取消线程之前执行的代码(例如内存取消分配等),则可以在输入代码之前将线程取消状态设置为禁用,并启用退出代码的取消。第二个问题是线程如何以及何时真正停止(取消)。取消类型的回答了这个问题。如果类型设置为(不推荐) asynchronous,,则取消可能发生在最近的指令处。如果将类型设置为默认的延迟取消,则取消将发生在下一个“取消点”,即检查线程取消状态并终止线程的POSIX函数。
https://stackoverflow.com/questions/24701607
复制相似问题