Linux线程

2023-09-17 20:35:18

 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

 

 锁的属性

 

 

 

更多推荐

ceph分布式存储

目录前言一、概述(一)、特点(二)、组件(三)、架构图二、搭建(一)、基础环境(二)、准备工作(三)、ceph安装(四)、集群构建(五)、dashboard安装(六)、ceph文件系统创建(七)、客户端挂载总结前言Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经

【SLAM】10.纵观SLAM,对比方案和未来方向

"天下谁人配白衣”SLAM方案研究方向SLAM方案站在历史角度,看一下为SLAM的发展带来贡献的方案:2007年—A.J.Davison—MonoSLAM视觉SLAM的先驱,建立在EKF基础上,此前基本无法在线运行,意义较大;应用场景窄;2007—Klein—PTAM也是SLAM重要事件:双线程结构;跟踪部分实时响应,

UI设计师的工作职责 优漫动游

五、思维导图软件:MindManager或XMindMindManager或XMind都为思维导图软件,具体使用哪个软件并不重要,根据个人习惯就行。思维导图想必大家在进行策划分析和头脑风暴时,都用过。在UI设计中,也是经常用到。优途UI设计培训中特开设该课程就是主要用来整理产品需求思路、产品架构、产品的交互逻辑等等。总

springBoot整合harbor

<docker.version>3.2.13</docker.version><fastjson.version>1.2.75</fastjson.version><dependencies><dependency><groupId>com.github.docker-java</groupId><artifactId

性能测试 —— 性能测试常见的测试指标 !

一、什么是性能测试先看下百度百科对它的定义,性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境下系统性能是否达到预估的性能需求,发现系统可能存在的性能瓶颈,进而改善优化并系统的性能,提高系

铁路设备屡遭破坏!RFID电子锁实现铁路防护网破坏实时报警管理

铁路防护网是铁路运输中保障安全的重要组成部分,然而,铁路设备被破坏的情况时有发生,给铁路运输带来了严重的安全隐患和经济损失。一、铁路防护网面临的挑战铁路防护网作为铁路运输的重要保障措施,时刻面临着破坏行为的威胁。传统的锁控系统存在以下问题:开关锁记录不完善:传统锁控系统无法准确记录每次开锁和关锁的时间、地点以及操作人员

Xamarin.Android实现App内版本更新

目录1、具体的效果2、代码实现2.1基本原理2.2开发环境2.3具体代码2.3.1基本设置2.3.2系统的权限授予2.3.3进度条的layout文件2.3.4核心的升级文件3、代码下载4、知识点5、参考文献1、具体的效果有事需要在程序内集成自动更新的功能,网上找了下,改改适配下Xamarin.Android,效果如下2

API接口文档管理系统平台搭建(更新,附系统源码及教程)

简介这是一款简洁大方的API接口文档管理系统,附系统源码及教程方法。可以轻松管理和使用API接口。安装步骤打开config/database.php配置数据库信息导入数据库data.sql设置运行目录为/public伪静态设置thinkPHP后台地址/admin/login.html账号:admin密码:123456源

LLM(一)| 百川智能baichuan7B、13B、53B以及baichuan2总结

之前在文章baichuan-53BVSChatGLM-6B对比中做过百川大模型53B和ChatGLM6B模型的效果对比,由于百川大模型的内测模型是53B,因此本次对比参数量差异较大,但仍然可以看到两个模型的效果。百川大模型在benchmark上有超越ChatGLM和LLaMA的迹象,尤其是在中文任务上的表现,下面分别对

让Pegasus天马座开发板吃上STM8S标准库

WeCanStudio官方仓库的示例工程,只提供基于STM8S003寄存器方式来开发Pegasus天马座开发板。在此,我将基于官方的工程示例,将STM8S标准库移植到工程中。先上图,看运行结果:main.c文件#include"config.h"#include"delay.h"#defineLED_GPIO_PORT

OpenGL之着色器

着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。GLSL着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身

热文推荐