加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux 控制线程执行顺序

发布时间:2022-10-11 20:30:18 所属栏目:Linux 来源:网络
导读: 线程等待
1.代码跑完结果对
2.结果不对
3.代码异常了
pthread_join不需要处理,线程异常不需要进程处理
int pthread_join(pthread_t thread, void **retval);
//输出型参数,用来获取新线程

线程等待

1.代码跑完结果对

2.结果不对

3.代码异常了

pthread_join不需要处理,线程异常不需要进程处理

int pthread_join(pthread_t thread, void **retval);
//输出型参数,用来获取新线程退出的时候,函数的返回值

线程终止的方案:

1.函数中的return(a.main函数退出的时候代表(主线程and进程退出) b. 其它线程函数return,只代表当前线程退出)

2.新线程通过pthread_exit终止自己,exit函数用来终止进程,如果只想终止当前线程,不要调用exit

void pthread_exit(void *retval);

3.取消目标线程

int pthread_cancel(pthread_t thread);

pthread_t pthread_self();

自己的线程id

如果不想等待

线程分离,分离之后的线程不需要被join,运行完毕后,会自动释放Z pcb

如何分离

int pthread_detach(pthread_t thread);

一个线程被设置为分离后就不能被join了。一般join的情况是主线程不退出,新线程处理完业务后退出

进程ID

我们查看到的线程ID是pthread库的线程id,不是Linux内核中的LWP,pthread库的线程id是一个内存地址。

在这里插入图片描述

让我们回顾一下Linux中线程创建的过程,我们首先创建主线程,那么我们会获得主线程的PCB线程池linux,PCB中的虚拟内存里会给主线程分配一个栈,然后我们又会创建一个新的线程,那么这块线程必然也需要一个属于自己的栈,那么这个栈应该被放在那里呢?这些栈被放到了线程库中,我们得到线程id(即线程的虚拟地址)后即可以通过页表快速映射到线程的属性和数据结构在库中存储的位置。

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!