linux pthread多线程编程

pthread_join():阻塞当前的线程,直到另外一个线程运行结束

pthread_exit():终止当前线程

pthread_cancel():中断另外一个线程的运行

pthread_kill():向线程发送一个信号


在编写多线程代码时,经常面临线程安全退出的问题。 

一般情况下,选择检查标志位的方式: 
在线程的while循环中,执行完例程后,都对标志位进行检查,如果标志位指示继续执行则再次执行例程,如果标志位设置为退出状态,则跳出循环,结束线程的运行。

这个标志位需要主线程(或其他线程)设置,设置后,主线程调用pthread_join接口进入休眠(接口参数指定了等待的线程控制指针),子线程退出后,主线程会接收到系统的信号,从休眠中恢复,这个时候就可以去做相关的资源清除动作。

这个方法可以保证子线程完全退出,主线程再去做相关的资源清除操作


但是某些应用中,或许会发生下面情况: 
子线程阻塞在某个操作无法被唤醒,即使主线程设置了标志位,由于子线程进入了休眠无法醒过来,也没有办法去检查标志位,这个时候调用pthread_join进入休眠的主线程等待不到子线程退出的信号,也会一直休眠,系统进入死锁。

为了更安全地使线程退出,主线程通过pthread_cancel函数来请求取消同一进程中的其他线程,再调用pthread_join等待指定线程退出。使用pthread_cancel接口,需要了解Linux下线程的两个属性,可取消状态和可取消类型,以及取消点的概念


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值