操作系统 --- 线程

基本概念:
线程是允许应用程序并发执行多个任务的一种机制。同一个程序中的所有线程均会独立执行相同的程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。
线程的优势:
线程的主要优势在于,能够通过全局变量来共享信息(注意:必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正在由其他线程修改的变量)。
临界区是指访问某一共享资源的代码片段,并且这段代码的执行应为原子操作,也就是访问同一资源的其他线程不应中断该片段的执行。
***线程同步:***即当有一个线程对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程则处于等待状态。

进程与线程的区别:
 进程是CPU分配资源的最小单位,线程是操作系统调度执行的最小单位。
 线程是轻量级的进程,在Linux环境下线程的本质仍是进程。
 进程间信息难以共享;由于除去只读代码段外,父子进程并未共享内存,因此必须采用一些进程间的通信方式,在进程间进行信息交换。
 调用fork()来创建进程的代价相对较高;即便利用写时复制技术,仍然需要复制诸如内存页表和文件描述符之类的多种进程属性。
 线程之间能够方便、快速地共享信息;只需将数据复制到共享(全局或堆)变量中即可。
 线程间是共享虚拟地址空间的,无需采用写时复制来复制内存,也无需复制页表。

线程间共享资源:
进程ID和父进程ID、进程组ID和会话ID、用户ID和用户组ID、文件描述符表、信号处置、文件系统的相关信息(文件权限掩码umask)、当前工作目录、虚拟地址空间(除栈、.text)
线程间非共享资源:
线程ID、信号掩码、线程特有数据、error变量、实时调度策略和优先级、栈,本地变量和函数的调用链接信息

互斥锁
为了避免线程更新共享变量时出现问题,可以使用互斥量来保证对任意共享资源的原子访问。一旦线程锁定互斥量,随机成为该互斥量的所有者,只有所有者才能给互斥量解锁。
一般情况下,对每一共享资源(可能由多个相关变量组成)会使用不同的互斥量,每一线程在访问同一资源时将采用如下协议:
· 针对共享资源锁定互斥量
· 访问共有资源
· 对互斥量解锁

***死锁场景:***忘记释放锁、重复加锁、多线程多锁,抢占锁资源

读写锁:
为了满足当前能够允许多个读出,但只允许一个写入的需求,线程提供了读写锁来实现。
读写锁的特点:
· 如果有其他线程读数据,则允许其他线程执行读操作,但不允许写操作;
· 如果有其他线程写数据,则其他线程都不允许读、写操作;
· 写是独占的,写的优先级最高;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值