Pthread学习笔记(3)

本文详细介绍了Pthread中的线程清理功能,包括pthread_cleanup_push和pthread_cleanup_pop的使用,以及在不同退出方式(pthread_exit、pthread_cancel、return、break、continue、goto)下如何执行清理函数。通过实例展示了清理函数的执行顺序和场景。
摘要由CSDN通过智能技术生成

Pthread学习笔记(3) 线程清理

pthread_cleanup_push和pthread_cleanup_pop

  函数原型如下:

void pthread_cleanup_push(void (*routine)(void *),void *arg)
void pthread_cleanup_pop(int execute);

相关解释

  在线程取消时需要对线程进行清理,释放资源,比如释放锁之类。
  pthread_cleanup_push()函数会将routine这个函数压入栈顶(这个栈是用于存放清理函数),并且arg是作为routine函数的参数。
  pthread_cleanup_pop()函数会将清理函数栈顶的函数弹出。
  在push和pop之间,如果线程被取消例如pthread_cancel(),或者线程调用pthread_exit()终止时会将函数依次弹出,并按弹出顺序(所以是跟入栈顺序相反)执行函数。
  如果pthread_cleanup_pop()函数的参数非0,那么在pop时也会执行该函数。

使用

  push和pop一定要成对使用,可以理解成{和}的关系,少了编译会报缺少{}的错。

pthread_exit退出线程

  如下程序,在子线程func中依次压入clean1和clean2函数,调用pthread_exit(0)终止。

#include<stdio.h>
#include<pthread.h>
pthread_t pt;
void clean1(void* arg)
{
   
    printf("This is clean1.\n");
}
void clean2(void* arg)
{
   
    printf("This is clean2.\n");
}
void* func(void* arg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值