当前位置: 首页 > news >正文

Linux线程

 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上执行。

 二.线程分类

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

三.线程终止

3.1主动终止

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

调用pthread_exit()
 

3.2被动终止

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

pthread_cancel(pthid)。

 

 

 一级指针也行

四.线程清理和控制

 

 栈,先进后出

 五.进程状态装转换

 六.线程的属性

 初始化结构体和销毁结构体

 

 第一个获取,第二个设置

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

七.线程的同步和互斥

·线程同步

有先后顺序

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

1.条件变  量

2.线程信号量


线程互斥

不能同时访问

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

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

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

互斥锁数据类型
pthread_mutex_t

 

 锁的属性

 

 

 

http://www.lryc.cn/news/169278.html

相关文章:

  • C++ 太卷,转 Java?
  • 《Java并发编程实战》第2章-线程安全性
  • 二蛋赠书三期:《C#入门经典(第9版)》
  • Augmented Large Language Models with Parametric Knowledge Guiding
  • Docker启动Mysql容器并进行目录挂载
  • 力扣刷题(简单篇):两数之和、两数相加、无重复字符的最长子串
  • Spark的基础
  • 如何在idea中新建第一个java小程序
  • AOP全局异常处理
  • 一阶低通滤波器滞后补偿算法
  • JS中Symbol的介绍
  • 封装统一响应结果类和消息枚举类
  • 应广单片机实现红蓝双色爆闪灯
  • 深入了解OSI模型:计算机网络的七大层次
  • games101 作业2
  • 二叉树链式存储结构
  • Claude 使用指南 | 可与GPT-4媲美的语言模型
  • 【汇编】微处理器
  • 按键点亮led灯
  • Java常见面试题
  • 笔记1.5:计算机网络体系结构
  • 【Python】Python 连接字符串应优先使用 join 而不是 +
  • uniapp 小程序 父组件调用子组件方法
  • Vue-01:MVVM数据双向绑定与Vue的生命周期
  • 数据通信网络之OSPFv3基础
  • FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
  • 我学编程全靠B站了,真香-国外篇(第三期)
  • c++ 变量常量指针练习题
  • Linux底层基础知识
  • JUC并发编程--------线程安全篇