C++线程退出清理

一 点睛

POSIX线程库提供了函数pthread_cleanup_push和pthread_cleanup_pop,让线程退出时可以做一些清理工作。这两个函数采用先入后出的栈结构管理,前者会把一个函数压入清理函数栈,后者用来弹出栈顶的清理函数,并根据参数来决定是否执行清理函数。多次调用函数pthread_cleanup_push将把当前栈顶的清理函数往下压,弹出清理函数时,在栈顶清理函数先被弹出。

由pthread_cleanup_push压栈的清理函数在下面3种情况下会执行:

1 线程主动结束,比如return或调用pthread_exit的时候。

2 调用函数pthread_cleanup_pop,且其参数为非0时。

3 线程被其它线程取消时,也就是由其他的线程对该线程调用pthread_cancel函数。

要注意的是,函数pthread_cleanup_push和pthread_cleanup_pop必须成对出现在同一函数中,否则就会出现语法错误。

二 线程主动结束时,调用清理函数

1 代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h> //strerror
void mycleanfunc(void *arg)   //清理函数
{
    printf("mycleanfunc:%d\n", *((int *)arg));    //打印传进来的不同参数                     
}
void *thfrunc1(void *arg)
{
    int m=1;
    print
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值