首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是从main()返回还是调用exit()禁用线程取消?

是从main()返回还是调用exit()禁用线程取消?
EN

Stack Overflow用户
提问于 2015-12-15 20:15:29
回答 1查看 175关注 0票数 2

当线程调用pthread_exit()时,POSIX需要由libc实现将取消状态和类型设置为PTHREAD_CANCEL_DISABLEPTHREAD_CANCEL_DEFERRED (XSH2.9.5,在附则线程取消清理处理程序下)。

从作为参数传递给pthread_create()的函数返回的线程的行为应该像调用pthread_exit()一样。但是,对于main()线程来说,这是不同的,从main()返回应该像调用exit()一样。

我找不到任何语言将exit()链接到禁用取消,或暗示与pthread_exit()相同的效果。

因此,应该从main()返回还是调用exit()禁用线程取消?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 20:05:11

不允许标准函数产生超出规定的效果。不指定exit对取消状态或类型有任何影响,因此对于任何符合的实现,它都不会。您可以通过安装调用pthread_cancel(pthread_self())atexit处理程序来观察这一点,然后调用任何取消点。然而,要注意以下几点:

如果通过调用atexit()注册的函数未能返回,则不应调用其余的已注册函数,其馀的exit()处理不应完成。如果不止一次调用exit(),则未定义该行为。

因此,如果atexit处理程序导致取消操作,exit将不会完成,但是再次调用它是未定义的行为。这样的过程必须完全避免退出,使用_exit,或通过信号导致自身异常终止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34298565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档