【Linux】线程(概念、特点、线程控制代码--创建/等待/终止、分离与结合属性)

本文介绍了Linux下线程的概念、特点,包括进程与线程的区别,并详细讲解了线程的创建、终止及等待的操作,以及线程的分离与结合属性。在Linux中,线程是通过进程模拟的,线程的创建和调度涉及到内核态和用户态。通过示例代码展示了如何在Linux下创建、终止线程及进行线程等待。
摘要由CSDN通过智能技术生成

一、进程和线程

进程和线程的概念:

进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。

线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

进程与线程的区别:

“进程——资源分配的最小单位,线程——程序执行的最小单位”

  1. 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

  2. 线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

  3. 对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

总的来说就是:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。

二、linux下线程的特点:

  1. Linux的线程是通过进程来模拟的,也就是说Linux里的线程本质上就是进程。

  2. Linux的线程机制是通过内核和库混合实现的,所以线程的实现在 Linux的核心态和用户态都有执行,内核实现线程/进程的调度 libpthread库实现线程之间的同步。这也就是为什么多线程程序需要连接一个libpthread库的原因。

  3. Linux这种用进程模拟线程的方式,和signal机制不一致,signal是发
    给进程的,但是在linux里,往一个进车发送signal,实际上只有一个线程处理这个signal。

  4. Linux程序如果用pthread_create启动一个新的线程,实际上启动了两个轻量进程,第一个是管理线程,第二个才是真正做事情的线程。但是后续新创建的线程就不需要再创建管理线程了。

  5. 在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。

三、关于线程的代码

创建线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值