线程操作

pthread线程不是linux系统默认使用的库,因此需要手动连接libpthread.a静态库
g++ xxx.cpp -lpthread -o xx.out
1、创建一个线程
pthread_creat(pthread_t *pthread传出参数传出线程的id, pthread_attr *attr设置线程的属性NULL表示默认属性,void *(*函数指针)(void *),void *arg传给函数的参数);如果创建线程成功则返回0.否则返回错误的编号。
线程执行函数返回值必须为void *,参数必须为 void *
线程id pthread_t其实就是unsigned long
2、获取线程id
pthread_self();
得到当前线程的编号。
3、线程退出。
线程属于进程,如果进程(主控线程)执行完毕生命周期结束,线程也会死亡。为了避免这种情况,可以使用pthread_exit函数,在主控进程中调用此函数,主控进程退出,但是线程不会死亡。pthread_exit(void *(val))当前线程退出,传出参数void *类型的val,当前线程的子线程并不受影响。
4 等待子线程退出,接受退出变量val。
pthread_join(pthread_t 子线程id,void ** val传出参数)
阻塞等待此子线程退出。
5 线程分离
pthread_detach。类似于进程,如果线程死亡,而没有prthread_join来进行收尸,该线程就会变成僵尸线程。如果对此线程进行detach操作,那么此线程就不需要被收尸,死亡后自动销毁。
pthread_detach(pthread_t 线程id);
注意:如果线程detach了,就不能再使用pthread_join在进行收尸,pthread_join 返回值为错误编号,表示回收失败。
6 杀死线程
pthread_cancel(pthread_t线程id)
杀死线程,被杀死的线程仍然需要被收尸。
但是杀死县城并不是立即生效的,在pthread_t被杀死的线程执行函数中,必须要有系统调用函数(取消点,检查点类似于游戏的存档,只能在固定位置存档)。如果线程执行函数中没有系统调用函数。则需要自己加上取消点。pthread_testcancel();执行到这一步,会去检查是否有pthread_cancel要杀死我。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值