首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthread_cleanup_push和pthread_cleanup_pop的使用

pthread_cleanup_push和pthread_cleanup_pop的使用
EN

Stack Overflow用户
提问于 2022-10-17 16:12:36
回答 1查看 58关注 0票数 0

对于多线程编程,我仍然是新手,我不太明白为什么只在线程被调用时才使用pthread_cleanup_pushpthread_cleanup_pop,而调用pthread_exit()不需要清理。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-17 16:46:45

线程取消清理处理程序( pthread_cleanup_push/pthread_cleanup_pop管理的)的目的是在取消时对线程使用的用户定义的数据和结构进行清理。因为取消通常是一种异常的终止方法,所以当线程被取消时,您可以注册处理程序来“清理”,因为线程在被终止之前无法完成。

例如,假设在A和B之间共享了一个互斥锁,线程A获得锁,然后在有机会释放它之前被取消。然后线程B尝试获取锁,但是会无限期地被卡住,因为锁永远不会(也永远不会)由A释放,为了避免这一点,使用线程取消清理处理程序,您可以确保当A被取消时,互斥锁被释放。

在正常情况下,例如线程中的returnpthread_exit(),假设不需要这样的清理过程,因为线程本身决定何时退出,并且在退出之前完全控制该做什么,因此任何清理都可以很容易地执行。

注意到,但是对pthread_exit()的调用仍然会导致清理处理程序运行。这是因为线程使用的其他函数可以调用pthread_exit(),这些函数可能是您可以控制的,也可能是您无法控制的(我认为这是一种不常见的情况,但仍然如此)。

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

https://stackoverflow.com/questions/74100179

复制
相关文章

相似问题

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