多线程(二)线程控制(创建 退出 等待)

线程控制

注意:操作系统不会单独向上创建线程调用接口,只能通过封装库函数完成对线程操作

区分线程和轻量级进程:线程是基于上层(用户态)而言,对应底层(内核态)就是一个轻量级pcb(lwp)

创建:

int pthead_create(pthread_t  *tid , pthread_arr_t  *attr , void* (*routine)(void*) , void* arg)

  • pthread_t  *tid     接受线程tid  线程操作句柄
  • pthread_arr_t  *attr   设置线程属性(通常置NULL)
  • void* (*routine)(void*)    线程入口函数
  • void* arg   传递给线程数据
  • 返回值:成功返回0    失败返回非0(错误编号)

测试代码如下:

测试结果如下:

退出

在线程入口函数return   线程入口函数运行结束,线程就会被销毁

注意:main函数中return会退出进程,main函数中return后所有线程都结束退出

void  pthread_exit(void* retval)    功能:退出调用线程  谁调用 谁退出

int pthread_cancel(pthread_t  tid)    功能:取消指定线程

测试结果表明:main函数中使用pthread_cancel(tid)    功能:取消刚创建的线程

测试结果表明:mian函数直接退出  导致所有线程都退出

测试结果表明:主线程退出,并不会引起进程的退出

等待

等待指定的线程退出,获取退出线程返回值,回收资源

一个资源被创建后,默认的情况下,退出时不会自动释放资源

joinable状态,处于这个状态线程退出后不会自动释放资源

int  pthread_join(pthread_t  tid  ,void**  retval)

tid:指定要等待的线程

retval:用于获取线程返回值

在获取线程返回值这块需要注意,线程返回值为void*,此处join需要传入void**的参数,如果直接传void**的值,即传入NULL值,导致程序崩溃,对此,只能设置void* retval=NULL,传入&retval  即等同于void**

分离

将线程分离属性设置为detach状态

detach状态,线程退出后,自动释放资源,不需要被等待

int  pthread_detach(pthread_t  tid )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HT . WANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值