linux下pthread_cleanup_push和pthread_cleanup_pop

本文详细解析了pthread_cleanup_push函数的使用方法及其与线程清理的关系。介绍了该函数如何将清理回调压入线程栈,并在特定条件下调用这些函数。探讨了四种常见情况下清理函数的调用时机,包括正常退出、异常退出等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pthread_cleanup_push的使用

该函数为当前的线程注册一个清理回调函数,清理函数在使用push的时候压入线程的一个栈中。
那么该清理函数何时会被调用呢?
记住,pthread_cleanup_push必须和pthread_cleanup_pop同时使用。
当push后,在线程退出前使用pop,便会调用清理函数。
pthread_cleanup_pop有一个参数,如果在最后调用pop时该参数赋值为0,则表示只是从栈中取出该清理函数,却并不会调用该清理函数。

还有一种情况,就是在push和pop之间线程的退出。如果使用return退出线程,那么不会调用清理函数,如果是使用pthread_exit函数退出线程会调用清理函数。

总结为以下四种情况

情况一

push
pop(非0)
// 调用清理函数

情况二

push
pop(0)
// 不会调用清理函数

情况三

push
	return		// 不会调用清理函数
pop

情况四

push
	pthread_exit		// 调用清理函数
pop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值