Linux下线程(LWP)的相关概念

本文介绍了Linux下线程(LWP)的概念,包括线程与进程的区别、线程创建、线程等待以及线程ID和进程ID的获取。线程是CPU调度的基本单位,比进程创建更轻量化,主要通过pthread_create函数创建,线程等待防止类似僵尸进程问题。通过pthread_self和ps -aL可以获取线程ID,但两者数值不同,LWP返回的才是真正的线程ID。
摘要由CSDN通过智能技术生成

一.概念

线程:一个进程内部的控制序列。或者说在一个程序里的一个执行路线

首先明确一个概念,在Linux下是没有进程的控制块的,使用进程模拟的线程。一个进程中至少有一个线程。所以进程跟线程的数量是一对(一)多的。

线程跟进程的区别
1.进程是资源分配的基本单位,线程是CPU调度的基本单位。
2.创建一个线程要比创建一个进程更加轻量化,所以我们一般也把线程叫做轻量级进程。
3.进程之间是相互独立的,一个进程的异常不会导致另一个进程的异常;而线程由于共享地址空间,访问共同资源,如果一个线程异常,可能会导致所有的线程都异常。
4.进程之间数据各自私有,互不干扰,而线程大部分资源都是共享的,但也有部分资源各自私有,比如线程ID,线程栈,各自的寄存器等等。
5.进程间通信是比较麻烦的,而线程由于共享数据,通信是很容易的。

以下用到的所有的函数的头文件都是#include <pthread.h>,用到的函数在gcc(g++)编译的时候都要加上 -lpthread

创建线程
要知道,创建线程是比创建进程更轻量化的,创建进程要创建PCB,虚拟地址空间,页表,还要在物理内存上存储存储该进程的数据等等,而在Linux下使用进程模拟的线程,则创建线程只需要创建一个PCB即可,该PCB也指向虚拟地址空间。即线程所用数据就是虚拟地址空间上的数据。我们把创建进程时创建的PCB称为主线程。
在这里插入图片描述
线程创建函数:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
               void *(*start_routine) (void *), void *arg);

thread:输出型参数,返回线程ID
attr:设置线程的属性,一般为NULL即可
start_routine:一个函数指针,即线程所要执行的函数,返回值void*,参数void*
arg:传给start_routine的参数。
返回值:创建成功返回0,创建失败返回错误码。


线程等待
为什么要线程等待?
因为已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。如果不进行线程等待,就会发生类似于僵尸进程的问题。所以必须线程等待。

线程等待函数:

int pthread_join(pth
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值