冷月手撕408之操作系统(10)-经典同步互斥问题

死锁专家
• 阅读 1284

操作系统的经典同步互斥问题主要是介绍了 几个经典的同步互斥问题,其中搞懂生产者消费者问题、读者写者问题;其他的问题其实都是这两个问题的衍生。

主要的重点冷月做出了标识,知识点如下图(pdf版或xmind源文件请请关注公众号:学长冷月,回复操作系统)。

冷月手撕408之操作系统(10)-经典同步互斥问题

冷月点睛

生产者消费者问题

问题描述:一组生产者和一组消费者互斥的使用一些缓冲区,生产者负责生产产品到缓存区,消费者负责使用

生产者与消费者同步关系;生产者之间互斥关系;消费者之间互斥关系;使用缓存区也是互斥关系

确定信号量 mutex=1 表示缓存区互斥 ;empty = n 表示缓存区数量 ; full = 0 表示初始生产的数量

读者写者问题

问题描述:写者只能写,读者只能读。读者可以并行的读,但是写者只能串行的写。写时不能读,读时也不能写

读者和读者是互斥关系;读者和写者是互斥关系

需要一个计数器来记录读者进程的数量

哲学家进餐问题

问题描述:每个哲学家在思考,饿了就吃饭。2个哲学家中间有一支筷子,只有拿到2支筷子时才能开始吃饭

每个哲学家都是互斥关系

如果这篇博文有帮助到您,可以帮冷月点一个赞或者加一个关注哦!

欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。
如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com
点赞
收藏
评论区
推荐文章
baskbull baskbull
4年前
操作系统学习笔记 原来自旋锁还可以这样实现!
在java中我们知道对线程使用CAS(compareandswap)来实现自旋锁,在没有学习操作系统之前,我以为这是唯一一种方法了。但是今天学到了操作系统中的同步互斥,终于明白了原来CAS、TS、Swap这些都是硬件提供的原子操作罢了!不仅CAS可以实现自旋锁,TS(TestandSet)同样可以!临界区临界区进程中访问临界资源的一段需要互斥执行
Wesley13 Wesley13
3年前
java多线程——CAS
关于无锁队列,网上有很多介绍了,我做一个梳理,从它是什么再到它有哪些特性以及应用做一个总结,方便自己使用和记录。本文主要内容:非阻塞同步是什么cas是什么特性ABA问题无阻塞队列1非阻塞同步互斥同步属于一种悲观的并发策略,总认为只要不去做正确的同步措施,肯定会出问题,无论共享数据是否真的会出现竞争,它都要进行加锁。而基
Wesley13 Wesley13
3年前
java生产者消费者问题(线程同步与线程等待的应用)
生产者/类说明:生产者@author作者:user@version创建时间:201145下午01:48:11/publicclassProducerimplementsRunnable{privateSyncSt
Kubrnete Kubrnete
4年前
高并发之网络IO基础
本篇文章是我在学习高并发问题时接触到的网络I/O相关知识,比较底层且纯理论,整合以作参考。下面长文预警。高并发基本表现为单位时间内系统能够同时处理的请求数核心是对CPU资源的有效压榨。注意,有效很重要。C10K问题C10K问题本质上是操作系统的问题。对于Web1.0/2.0时代的操作系统而言,传统的同步阻塞I/O模型都是一样的,
Stella981 Stella981
3年前
Python经典面试题100道(附PDF下载地址)
最近肝了一个月,整理了下经典的Python经典习题100道,有基础的,也有进阶的,用习题来巩固知识点,不枯燥,为了方便大家查阅,我把这100道题整理成了PDF文档,大家可以下载到电脑或导入到kindle进行阅读,关注下面的公众号,在公众号后台输入框输入「100」获取Python经典100题PDF文档。!(https:/
Wesley13 Wesley13
3年前
Java中生产者与消费者模式
 生产者消费者模式首先来了解什么是生产者消费者模式。该模式也称有限缓冲问题(英语:Boundedbufferproblem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同
Wesley13 Wesley13
3年前
Java并发编程原理与实战十八:读写锁
ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。基本规则:读读不互斥读写互斥写写互斥问题:既然读读不互斥,为何还要加读锁答:如果只是读,是不需要加锁的,加锁本身就有性能上的损耗如果读可以不是最新数据
Wesley13 Wesley13
3年前
ES某节点CPU增长至100%的诡异问题
这是一个从事发到目前为止我没有从根本上解决的技术问题,也是我心中的一个非常大的疑惑。写于:20200614周日,下午14:00问题已解决,解决过程和方案可以看文章最末尾,解决方案写于2020062015:26问题一:2020年6月4号上午10点左右(高峰期),A集群某节点,我们姑且称之为37号节点,CPU增长至100%
Stella981 Stella981
3年前
Linux内核同步机制
1\.同步与互斥(1)互斥与同步机制是计算机系统中,用于控制进程对某些特定资源(共享资源)的访问的机制(2)同步是指用于实现控制多个进程按照一定的规则或顺序访问某些系统资源的机制。(3)互斥是指用于实现控制某些系统资源在任意时刻只能允许一个进程访问的机制。互斥是同步机制中的一种特殊情况。(4)同步机制是linux操作系统可以高效稳定运行的重
Wesley13 Wesley13
3年前
Java并发编程总结(一)Syncronized解析
Syncronized解析作用:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。用法:(1)修饰普通方法(锁是当前实例对象)(2)修饰静态方法(锁是当前对象的Class对象)(3)修饰代码块(锁是Synchonized括号里配置的
设计模式-单例模式概述 | 京东云技术团队
我们常把23种经典的设计模式分为三类:创建型、结构型、行为型,其中创建型设计模式主要解决“对象的创建”问题,将创建和使用代码解耦,结构型设计模式主要解决“类或对象的组合或组装”问题,将不同功能代码解耦,行为型设计模式主要解决“类或对象之间的交互”问题,将不