即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

Linux线程的初步入门基础知识知识

编程语言 ChaseRaod 35℃ 0评论

之前我们已经介绍过进程的基本概念,那么线程是什么?


线程是进程内部的一个执行分支,举个栗子:比如一个项目的完成是多个团队之间的合作,和每个团队都是这个项目运行的一个分支。即线程是进程内部的执行分支。

进程的特点:


(1)系统中程序执行和资源分配的基本单位


(2)每个进程都有自己的数据段、代码段、堆栈区


(3)在进行切换时需要比较复杂的上下文切换

线程特点:


(1)减少处理机的空转时间,支持多处理器以及减少上下文切换开销,比创建进程小很多


(2)进程内独立的一条运行路线


(3)线程是CPU调度的基本单位(有多个执行流时才需要调度),也成为轻量级进程

linux中没有真正意义上的线程,所以我们用进程模拟线程,如下图:


这里写图片描述

各线程之间共享以下资源和环境:


(1)文件描述符表


(2)每种信号的处理方式(SIG_IGN, SIG_DFI或者用户自定义的信号处理函数)


(3)当前工作目录


(4)用户id和组id


任何线程对系统资源的操作都会给其他线程带来影响

各线程私有以下资源:


(1)线程id


(2)上下文,包括各种寄存器的值,程序计数器和栈指针


(3)栈空间


(4)error变量


(5)信号屏蔽字


(6)调度优先级

Linux下的线程库函数是由POSIX标准定义的,称为POSIX thread或pthread。linux中线程函数位于libpthread共享库中,因此在编译时要加上Ipthread。

线程标识:


线程id


进程id在整个系统中是唯一的,线程id只在它所属的进程环境中有效


函数:pthread_self()


这里写图片描述


返回值:调用线程的id

pthread_t类型通常用结构体表示,不能把它作为整数处理(linux使用无符号长整数表示),为了移植,使用函数来比较线程:pthread_equal()


这里写图片描述


若两个线程id相等则返回非0值。否则返回0.

创建进程:pthred_create


这里写图片描述


参数的含义:thread-线程标识符、attr-线程属性设置,通常取NULL、start_routin-线程函数的起始地址,是一个以指向void的指针作为参数和返回值的指针,arg-传递给start_routine的参数。成功返回0,失败返回错误码。

这里写图片描述

运行结果如下:


这里写图片描述

退出线程:pthread_exit()


这里写图片描述


reval-线程结束时的返回值,可由其他函数如pthread_join()来获取。


exit是退出进程,不能用来退出线程。

在任何一个时间点上,线程是可结合的或者分离的。一个可结合的线程能够被其他线程收回其资源和杀死。在其他资源回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。

等待线程:pthread_join()


这里写图片描述


th-等待线程的标识符


thread_return-用户定义的指针,用来存储被等待线程结束时的返回值(不为NULL时)。成功放回,出错返回错误码。


由于一个进程中的多个线程是共享数据段的,通常在线程退出之后,退出线程所占用的资源并不胡随着线程的终止而得到释放,等待方式为阻塞时等待。

取消线程:pthread_cancel()


这里写图片描述


th-要取消的线程的标识符。成功返回,出错返回错误码。


作用:取消同一进程中的其他线程,被取消的线程可以设置自己的取消状态,被取消的线程接收到另一个线程的取消请求后,是接受还是忽略这个请求,如果接受,是立刻进行终止操作还是等待某个函数的调用等。


这里写图片描述


这里写图片描述

进程分离:pthread_detach()


这里写图片描述


将子线程设置为分离的,则线程结束后会自动释放所有资源。


这里写图片描述


这里写图片描述

转载请注明:CodingBlog » Linux线程的初步入门基础知识知识

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情