gpt4 book ai didi

c - 是否应该从 main() 返回或调用 exit() 禁用线程取消?

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:01 25 4
gpt4 key购买 nike

当线程调用 pthread_exit() 时,POSIX 要求将取消状态和类型设置为 PTHREAD_CANCEL_DISABLEPTHREAD_CANCEL_DEFERRED (XSH 2.9. 5、题词Thread Cancellation Cleanup Handlers)下由libc实现。

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

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

那么,是否应该从 main() 返回或调用 exit() 禁用线程取消?

最佳答案

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

If a function registered by a call to atexit() fails to return, the remaining registered functions shall not be called and the rest of the exit() processing shall not be completed. If exit() is called more than once, the behavior is undefined.

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

关于c - 是否应该从 main() 返回或调用 exit() 禁用线程取消?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com