线程控制

线程调度和线程控制 只不过,优先级高的线程获取 CPU 资源的概率较大,优先级低的并非没机会执行。在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。Java中的线程调度器也支持抢占式调度,允许高优先级的线程在任何时候抢占低优先级线程的CPU时间。在Java中,线程调度和线程控制是多线程编程中重要的概念,它们用于管理和控制线程的执行。**2. 线程控制(Thread Control): ** 线程控制是指通过编程手段来控制线程的执行行为,包括线程的启动、暂停、终止等。 阅读详情

线程基本概念

  1. 程序中的一个执行路线
  2. CPU调度的基本单元,程序执行的最小单位
  3. 具有线程控制块(TCB),Linux下,有进程模拟实现,即TCB也就是task_struct结构体
  4. 所有的线程都共享其进程的地址空间,但是有其独立的上下文资源和栈空间
  5. 关于详细的线程概念,大家可以参考:https://blog.youkuaiyun.com/Code_ZX/article/details/85168337

线程控制

  1. 所用库:POSIX线程库,使用编译器命令时需要加“-pthread”选项
    1.头文件:<pthread.h>
    注:库都是对系统调用接口的封装

  2. 线程创建
    int pthread_create(pthread_t thread, const pthread_attr_t attr, void (start_routine)(void), void arg);
    thread:线程id(不被操作系统所知)
    attr:设置线程属性,一般设置为默认:NULL
    start_routine:线程启动后要执行的函数的地址
    arg:传递给其执行函数的参数
    成功返回0,失败返回错误码

  3. 线程组
    1.引入:Linux中,线程被称为轻量级进程,即每一个用户态进程对应一个进程描述符(task_struct结构体),为了解决在没有线程时,一个进程描述符对应一个进程id的问题,则引入了线程组
    2.概念:线程组,又称多线程进程,即在该进程中只有一个进程描述符,但是其对应的id并不是进程id,而是主线程id,另外的线程的id链接在主线程id之后
    3.获取线程id(两个)
    (a). 命令(加-L选项):ps -Lf
    获取的是线程的标识符数值
    在这里插入图片描述
    2.系统调用接口
    syscall(SYS_gettid)
    获取的是线程的操作句柄
    3.库函数
    pthread_t pthread_self(void);
    获取自身线程id,其实质也是线程操作句柄
    注:Linux下,就pthread_t类型的线程id而言,本质就是一个进程地址空间上的一个地址
    在这里插入图片描述

  4. 线程终止
    1.return +返回值
    注:在主线程(main)中,不适用
    2.通过pthread_exit()将自己终止
    void pthread_exit(void value_ptr);
    value_ptr:传递给线程返回值的参数
    无返回值
    3.调用pthread_cancel()取消一个执行中的线程
    int pthread_cancel(pthread_t thread);
    thread:要终止的线程的线程id
    成功返回0,失败返回错误码

  5. 线程等待
    int pthread_join(pthread_t thread, void value_ptr);
    thread:线程id
    value_ptr:指向线程返回值的指针,设置为NULL,表示对其返回值不感兴趣
    成功返回0,失败返回错误码
    作用:释放线程资源,避免不等待导致产生类似于进程中僵尸进程,以至于造成内存泄漏的问题

  6. 线程返回值
    1.通过return的方式返回:返回值即使return的返回值
    2.通过pthread_exit()返回:返回值就是调用pthread_exit()函数时传入的参数
    3.通过pthread_cancel()返回:返回值就是宏 PTHREAD_CANCELED
    获取返回值代码(包含线程创建,终止,等待的代码):
    https://github.com/zxshuaige/Linux_code/blob/master/pthread_t.c

  7. 线程分离
    int pthread_detach(pthread_t thread);
    作用:告诉操作系统在线程退出后自动释放线程资源,即不需要再进行线程等待
    注:在不关心线程返回值的时候使用线程分离释放线程资源,否则使用线程等待释放线程资源,不能即使用线程等待,又使用线程分离,二者只能取其一
    线程分离测试代码:https://github.com/zxshuaige/Linux_code/blob/master/pthread_d.c

谢谢大家的阅读,希望你们有所收获,最近复习Linux的基本知识,希望能熟练使用Linux…
在这里插入图片描述

【NLP】语言模型的发展历程 (1) N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。 阅读详情

相关推荐

FPGA AXI DDR3读写时序调试与FIFO缓存实战解析

本文深入解析FPGA中AXI协议与DDR3的读写时序调试,重点探讨FIFO缓存在数据流控制中的关键作用。通过实战案例详细讲解突发传输中的地址对齐、数据分片等常见问题,并提供状态机设计、仿真波形分析和性能优化技巧,帮助开发者高效解决高速数据存储场景下的时序同步与数据一致性问题。

blockchain9miner的博客 1119

线程TCB详解

TCB简介 操作系统中一个线程对应着一个TCB(Thread Control Block),叫做线程控制模块,控制着线程的运行和调度。 TCB组成 1、threadID:线程的唯一标识。 2、status:线程的运行状态 3、register:线程关于CPU中寄存器的情况 4、PC程序计数器:线程执行的下一条指令的地址 5、优先级:线程在操作系统调度的时候的优先级 6、线程的专属存储区:线程单独的存储区域 7、方法栈:线程执行的方法栈,用来保存线程当前执行的方法的信息 ...

qq_40276626的博客 1万+

狗都能看懂的MAML原理讲解和代码实现

meta-leaning指的是元学习,元学习是深度学习的一个分支,一个好的元模型(meta-learner)应该具备对新的、少量的数据做出快速而准确的学习。通俗的来讲, 对于人来说,给几张橘猫的图片让看一下,再给你几张没见过的英短猫图片,你一定能很快识别出来都是猫。但是对于神经网络来说,并非如此。如果让一个小汽车分类网络去识别不同的大货车,那效果肯定很差。而传统的CNN网络都是输入大量的数据,然后进行分类的学习。但是这样做的问题就是,神经网络的通用性太差了,根本达不到“智能”的标准。而人类的认知系统,可以通

个人学习笔记 6万+

线程(操作系统408)

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。用户级线程中,有关线程管理(创建,撤销)的所有工作都由应用程序在用户空间中完成,线程对于内核来说是透明的,内核不知道线程的存在,只看得到进程。线程是处理机的独立调度单位,多个线程是可以并发执行的。而在同一个进程中,线程是独立调度的基本单位,而线程的切换代价远低于进程,因为在同一进程中,线程之间的切换不会引起进程之间的切换。

努力学习UE5ing。。。为了自己梦中的游戏而努力中 1229

车机破解避坑指南:为什么你的CarPlay盒子不识别?从USB设备ID解析兼容性问题

本文深入解析车机USB设备兼容性问题,特别是CarPlay盒子不识别的原因,从硬件ID到识别机制全面剖析。通过ADB工具和root权限操作,提供详细的破解方案和兼容性测试结果,帮助用户解决车机与第三方设备的连接问题。

weixin_29175469的博客 602

CarPlay盒子选购避坑指南:为什么你的车机破解了却用不了?从USB设备ID说起

本文深入解析CarPlay盒子硬件兼容性问题,从USB设备ID匹配到车机适配逻辑,揭示破解成功却无法使用的根本原因。通过分析USB设备识别的核心要素和逆向工程usb_device_manager.xml文件,提供三种主流解决方案对比,并强调操作中的硬件保护机制,帮助车主避免常见陷阱。

weixin_30706691的博客 474

【Linux学习】多线程——线程控制 | 线程TCB

介绍了线程创建,线程结束,线程等待,线程分离等线程控制的内容,还有C++对线程库的简单封装,以及线程库中的TCB结构和线程tid的本质。

weixin_63726869的博客 2184

Python 逆向解析知乎盐选反爬字体,实现内容精准还原

本文详细解析了知乎盐选内容的反爬字体机制,并提供了使用Python逆向解析WOFF字体文件的完整方案。通过fontTools库构建解码字典,实现乱码文本的精准还原,帮助开发者应对动态字体策略,同时强调法律与道德风险。

weixin_29268385的博客 1296

线程

线程(TCB)的概念 1. 线程是一个进程内部的控制序列 2. 一切进程至少都有一个执行线程 进程和线程: 1. 线程是在进程内部运行的执行流(线程在进程的地址空间内运行) 2. 线程执行粒度更细 3. 线程之间大部分资源是共享的(但也有私有的:线程拥有独立的上下文数据、有自己的私有栈结构) 进程的多个线程共享:地址空间、代码数据、文件描述符、当前工作目录、用户id和组id...

zhangjie1315的博客 499

晶振匹配电容容值计算方法

在使用晶振时,应仔细参考晶振规格书,以确保正确选择匹配电容,从而获得稳定和精准的时钟源。

aidi1111的博客 4653

运维与软件实施课表

运维与软件实施课表 课程 章节编号 章节 课程地址 软件及操作系统基础 ch01 软件及操作系统基础01 实施、运维工程师基本技能:https://blog.youkuaiyun.com/qq_28189423/article/details/82700539 老毛桃制作winPE镜像:https://blog.youkuaiyun.com/qq_2818942...

Mr.O~的博客 1万+

操作系统(四)进程线程

进程线程

qq_40212968的博客 955

图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础

本节全面介绍了图神经网络 (Graph Neural Network, GNN) ,包括其在数据分析和机器学习中的重要性。首先探讨了图作为数据表示的相关概念及其在各个领域的广泛应用;然后深入探讨图学习的重要性,包括不同的应用和技术。最后,重点介绍了 GNN 架构,并对比了它与其他方法之间的原理和性能差异。

盼小辉丶的博客 15万+

【Linux】线程控制

【Linux】线程控制:一文吃透线程控制基本用法!从接口到原理,再到模拟封装线程库接口

tan_run的博客 2275

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【线程】线程的控制

线程的控制:线程的创建,线程的终止,线程的等待,线程的分离,创建多线程

奇点的博客 1522

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Linux多线程——线程控制

线程是进程内的基本执行单位,作为 CPU 执行的基本单位,线程的控制与任务执行效率息息相关。合理地进行线程管理,能大大提升程序的执行效率,掌握线程的基本操作至关重要。

2401_83603768的博客 1124

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

线程的控制

性能损耗:如果再计算密集型的情况下,线程的数量大于处理器的数量,那么会引起性能损耗,因为计算密集型基本一直在使用CPU,但是如果线程较多的话,那么就需要切换线程,此时本来可以一直进程计算,但是线程多的话,还需要去切换线程,所以再计算密集型的情况下,一般不需要线程多。这里看试验结果,当线程被创建后 3秒,然后所有线程都退出了,包括主线程,而监测脚本也是3秒后一个i小鹌鹑都没了,所以我们也就可以得出试验结论, exit 是用于退出进程的,如果线程调用该函数的话,那么会导致整个进程退出。done #监测脚本。

m0_73455775的博客 267

线程控制与线程库

对于Linux来说,其内核只有lwp,用户想要创建线程就需要调用用软件层封装的线程接口,那如果我们要得到线程的其他属性比如id,优先级,状态,栈大小,用户要调用线程库pthread.so就需要先将在用户内存的pthread.so线程库的地址通过页表映射到虚拟地址的共享区,在内存中线程库的内部维护着所有线程的属性集合,哦线程的属性存在这里,也就是线程的属性不是操作系统管理的,是线程库自己管理的,库管理线程属性集合依照先描述再组织的原则,对于比如线程大小,id状态什么的就装在一个struct结构体里面,

2301_80377335的博客 847

<Linux> 线程控制

关于线程资源的分配,以及线程控制的各个接口和实操,还有关于线程库的深入详解

weixin_61522065的博客 1386

Linux线程——线程控制及理解

本文介绍了Linux下线程控制的基本原理与验证方法。通过代码示例验证了三个关键结论:1)线程本质是轻量级进程,共享相同PID;2)线程共享进程地址空间;3)线程异常会导致整个进程退出。文章详细讲解了pthread线程库的作用,指出其在Linux系统中的重要性,并解释了为何需要动态链接(-lpthread)。同时对比了不同系统版本对线程库的支持差异,以及C++11线程库在不同平台下的实现原理。通过实验验证,帮助读者理解Linux线程实现机制及跨平台线程库的设计考量。

2301_79705195的博客 758

线程的数量控制

在编程中,往往都需要采用线程来提高速度,但线程并不是越多越好。1. 线程越多,JVM 所占资源越多2. 线程越多,越容易造成资源冲突,如果处理不当,造成死锁。 所以,在启动线程的时候要根据应用程序的特点限制线程的数量。 本程序采用了java.util.concurrent的锁进行线程数量控制,测试代码如下:/** * 专注互联网,分享创造价值 * maoxia

jTeam的专栏 5918

Linux线程控制

简单的线程控制

qq_65285898的博客 1388

[Linux]——Linux线程控制

Linux线程控制 上篇文章我们介绍了线程的基本概念,详细叙述了线程的一些细节性知识点,我们之前写过进程控制的博客,但是我们今天所写的关于线程控制的函数与进程控制有所不同。相信你肯定还记得我们上篇博客中说明了在Linux下实际上没有真正意义上的线程,他们都是利用进程模拟的,那么也就意味着系统并没有提供一组系统调用接口来进行线程的控制,所以我们先来谈谈使用什么方案进行线程控制。 POSIX线程库 因...

lucky52529的博客 856

linux线程中如何控制子线程退出

linux线程中如何控制子线程退出 一.相关接口介绍 1.线程的创建-pthread_create 使用man 3 查询函数使用 int pthread_create(pthread_t *thread, //线程id const pthread_attr_t *attr, //线程属性,一般为空 void *(*start_routine) (void *), //线程处理函数 void *

qq_38240926的博客 1593

python子线程退出及线程退出控制的代码

这篇文章主要介绍了python子线程退出及线程退出控制的代码,具有一定的参考借鉴价值,需要的朋友可以参考下 下面通过代码给大家介绍python子线程退出问题,具体内容如下所示: def thread_func(): while True: #do something #do something #do something t=threading.Thr...

lamehd的博客 6328
上一篇: 线程基本概念
下一篇: 线程的同步与互斥
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值