Linux线程

Linux线程_第1张图片

 1.进程是资源管理的最小单位,线程是程序执行的最小单位。
2.每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程,它包含独立的栈和CPU寄存器状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包括打开的文件、内存页面、信号标识及动态分配的内存等。
3.因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。
4.在操作系统设计上,从进程演化出线程,最主要的目的就是更好地支持多处理器,并且减小进程上下文切换的开销。

在 Linux 中,线程是进程的一部分,它是在同一个进程内运行的并发执行的单位。每个线程共享同一进程的地址空间、文件描述符和其他资源。

Linux 提供了多种线程编程的接口,其中最常用的是 POSIX 线程(Pthreads)。Pthreads 是一个标准化的线程库,定义了一组函数和数据类型,用于创建、管理和同步线程。

要在 Linux 中使用线程,可以按照以下步骤进行:

1. 包含 pthread.h 头文件:在程序中包含 pthread.h 头文件,这个头文件声明了与线程相关的函数和数据类型。

2. 创建线程:使用 pthread_create 函数创建新线程。该函数需要指定一个函数作为线程的入口点,并可以传递参数给该函数。

3. 同步线程:可以使用互斥锁(mutex)、条件变量(condition variable)等机制来同步线程的执行,避免竞争条件和冲突。

4. 等待线程完成:可以使用 pthread_join 函数等待线程的结束,并获取线程的返回值(如果有返回值)。

5. 销毁线程:使用 pthread_exit 函数或线程函数的返回语句来退出线程,并释放线程所占用的资源。

使用线程可以在程序中实现并行执行的能力,有助于提高程序的效率和响应性。然而,线程编程也涉及到并发访问共享数据的问题,需要特别注意线程间的同步和资源管理,以避免出现竞争条件和其他并发相关的问题。

 

一.进程和线程的关系

线程和进程的关系是:

线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一用户内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等等)。而将线程分配到某个cpu上执行。

Linux线程_第2张图片

 二.线程分类

分为用户级线程和内核级线程

Linux线程_第3张图片

三.线程终止

3.1主动终止

线程的执行函数中调用return语句

调用pthread_exit()
 

3.2被动终止

线程可以被同一进程的其他线程取消,其它线程调用

pthread_cancel(pthid)。

Linux线程_第4张图片

 Linux线程_第5张图片

 Linux线程_第6张图片

 一级指针也行

四.线程清理和控制

Linux线程_第7张图片

 Linux线程_第8张图片

 栈,先进后出

Linux线程_第9张图片

 五.进程状态装转换

Linux线程_第10张图片

 六.线程的属性

Linux线程_第11张图片

 初始化结构体和销毁结构体Linux线程_第12张图片

 Linux线程_第13张图片

 第一个获取,第二个设置

//int pthread_detach(pthread_t tid) 线程分离,线程自行退出

七.线程的同步和互斥

·线程同步

有先后顺序

是一个宏观概念,在微观上包含线程的相互排斥和线程先后执行的
约束问题。
解决同步方式

1.条件变  量

2.线程信号量


线程互斥

不能同时访问

线程执行的相互排斥
解决互斥方式
1.互斥锁

2.读写锁
3.线程信号量

互斥锁(mutex)是一种简单的加锁的方法来控制对共享资源的访问。在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行访问。若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁为止。

互斥锁数据类型
pthread_mutex_t

Linux线程_第14张图片

 Linux线程_第15张图片

 锁的属性Linux线程_第16张图片

 Linux线程_第17张图片

 Linux线程_第18张图片

Linux线程_第19张图片Linux线程_第20张图片

 Linux线程_第21张图片

你可能感兴趣的:(开发语言,服务器,运维)