操作系统④-⑤:多线程同步、互斥、同步、如何实现:锁和信号量(PV操作)

计算机操作系统 专栏收录该内容
9 篇文章 0 订阅

多线程同步

线程之间有共享进程的资源,⽐如代码段、堆空间、数据段、打开的⽂件等资源,但每个线程都有⾃⼰独⽴的栈空间。

1 互斥

互斥(mutualexclusion):保证⼀个线程在临界区执⾏时,其他线程应该被阻⽌进⼊临界区。
解决了并发进程/线程对临界区的使⽤问题。
在这里插入图片描述
多进程竞争公共资源的时候,也可以使⽤互斥的⽅式来避免资源竞争造成的资源混乱。

2 同步

所谓同步,就是并发进程/线程在⼀些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程/线程同步。

在这里插入图片描述
3 互斥与同步的实现和使用——锁和信号量

3.1 锁

在这里插入图片描述
在这里插入图片描述

锁:加锁、解锁操作;

  1. 忙等待锁,也被称为⾃旋锁(spin lock):最简单的⼀种锁,⼀直⾃旋,利⽤ CPU 周期,直到锁可⽤。
  2. 无忙等待锁:当没获取到锁的时候,就把当前线程放⼊到锁的等待队列,然后执⾏调度程序,把 CPU让给其他线程执⾏。

3.2 信号量

信号量: PV操作
在这里插入图片描述

在这里插入图片描述
PV操作如何使用

  1. 使⽤信号量实现临界区的互斥访问。

在这里插入图片描述

  1. 信号量实现事件同步

同步的⽅式是设置⼀个信号量,其初值为 0。
P执行0 -》-1,V执行 -1 -》 0。

生产者,消费者问题
在这里插入图片描述
4 经典同步问题——哲学家就餐、读者/写者问题

“哲学家进餐问题”对于互斥访问有限的竞争问题(如 I/O 设备)⼀类的建模过程⼗分有⽤。

不做限制,当5个人同时拿左手的叉子会出现死锁。
方案一:分奇偶使用不同拿叉子方案。
方案二:用数组记录每个人的状态。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

kankan_202104

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值