文章目录

  • 前言
  • 题目:判断下列问题的算法是否正确?若不正确,如何改正?
  • 解答与剖析
    • 第一小问:同步问题
      • 解答
      • 剖析
    • 第二小问:互斥问题
      • 解答
      • 剖析

前言

在进程的学习中,互斥和同步是最重点的内容,但由于其过于抽象,繁杂的信号量的使用令同学们望而生畏,本博客的目的是想通过对一道题目的解析来探究互斥与同步最本质的特性。由于博主水平有限,还恳请大家批评指正。


题目:判断下列问题的算法是否正确?若不正确,如何改正?

解答与剖析

第一小问:同步问题


解答

上图中的算法是有误的。假如进程A先运行,并且待存入缓冲区的信息数量很大,那么每一次存入新的信息时,原来已存入的信息就会丢失(每次只能存入一条消息),所以得想办法让进程A存入一条消息时,进程B就会接着运行并且取走进程A存入的那条消息。
那么我们要做的事情就明确了,题干中提到进程A“”,进程B“”,说明它们之间有合作关系,那么这就是同步问题。

待解决的问题如下:
① 必须让进程A先运行,这样才能保证进程B运行时有信息可以取;
② 进程A每次只能存入一条消息。

正确答案:

那为什么正确答案是这样子的呢?请看剖析。

剖析

首先,设置empty=1,full=0,为什么呢,可以这样理解:empty=1说明是缓冲区是空的,full=0说明缓冲区不是满的。(在本例中假设非空=满)

当进程A执行时,empty变为0,full变为1,此时进程B就可以执行了(进程A未执行时full=0,此时进程中的代码P(full)无法执行,故无法访问缓冲区)。

我们可以看到,在同步中,其实也蕴含了互斥,而且同一个信号量一般都是放在不同的进程中的,这样子才能通过对某共享资源的共同存取协同完成某项任务

所以说实现同步时,要注意至少有一个信号量是放在不同进程中的,因为至少要两个人要成实现所谓的协同,并且,既然要合作,那么他们肯定都掌握着某种共同的东西(这里指信号量),通过对这种东西进行操作而实现协同完成某项工作。

第二小问:互斥问题

解答

上图中的算法是有误的。题干提到,A、B是并发进程,他们共享一个临界资源,说明A、B之间是竞争关系,并且它们之间无合作关系,所以可判断这是互斥问题。

正确答案:

剖析

首先,设置信息量mutex(可以随意命名),默认值为1最重要的一点,无特殊情况下,互斥的信息量都是设置为1)。

此时,因为A与B是并发执行的,由于不确定性,A、B的执行顺序是不确定的。无论是哪个进程先执行,在这里假设A先执行了,当A执行了P(mutex)之后,mutex变为0,这样,B进程将无法访问临界资源,当A进程的代码执行后,再执行V(mutex),mutex变为1,这个时候,所有进程就可以再次争夺访问临界资源的资格(A进程也可继续争抢,因为操作系统的不确定性,各进程的执行顺序是不确定的)。


完。

通过一道题目来理解互斥和同步相关推荐

  1. 操作系统课设之Windows 的互斥与同步

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  2. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

  3. 操作系统(二十二)用信号量机制实现进程互斥、同步、前驱关系

    2.3.5 用信号量机制实现进程互斥.同步.前驱关系 目录 2.3.5 用信号量机制实现进程互斥.同步.前驱关系 2.3.5.1 用信号量机制实现进程互斥 2.3.5.2 用信号量机制实现进程同步 2 ...

  4. 线程互斥与同步 在c#中用mutex类实现线程的互斥_Golang 并发编程与同步原语

    5.1 同步原语与锁 · 浅谈 Go 语言实现原理​draveness.me 当提到并发编程.多线程编程时,我们往往都离不开『锁』这一概念,Go 语言作为一个原生支持用户态进程 Goroutine 的 ...

  5. Android ContentProvider支持跨进程数据共享与互斥、同步 杂谈

    在开发中,假如,A.B进程有部分信息需要同步,这个时候怎么处理呢?设想这么一个场景,有个业务复杂的Activity非常占用内存,并引发OOM,所以,想要把这个Activity放到单独进程,以保证OOM ...

  6. 【学习笔记】第二章——信号量机制 用信号量实现互斥、同步

    文章目录 一. 信号量机制 整型信号量 记录型信号量 例子: 总结 二. 用信号量实现互斥.同步 互斥 同步 前驱 总结 一. 信号量机制 信号量:一个用于表示系统中某种资源的数量的变量(整数 or ...

  7. QT多线程(三)线程互斥与同步

    前言 线程之间存在着相互制约的关系: 互斥关系,如线程争夺I/O设备而导致一方必须等待一方使用结束后方可使用 同步关系,完成同一任务的线程之间,需要协调它们的工作而相互等待.交互 临界区 先看这个类: ...

  8. 『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步

    「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(二),今天这篇是 Linux多线程详解(三),内容大致是线程互斥与线程同步,讲解下面开始! 「归属专栏」Linux系统编程 ...

  9. python多线程编程(2): 使用互斥锁同步线程

    上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的代码: # ...

最新文章

  1. java报错MalformedURLException: unknown protocol: c
  2. 面试题31.连续子数组的最大和
  3. 原来matplotlib 散点图可以这样
  4. mybatis配置mysql数据源_springboot+mybatis+Druid配置多数据源(mysql+postgre)
  5. 网关流控利器:结合 AHAS 实现 Ingress/Nginx 流量控制
  6. C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字
  7. cocos 时间函数需要什么引用_酱香型白酒,为什么需要长时间储存?
  8. 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
  9. javascript 基础 转
  10. RSA 前段加密 java 后台解密 已调试通过
  11. 鼠标移动 改变Datagrid行的背景颜色
  12. sql server 约束
  13. 转)Ubuntu安装teamviewer
  14. 可展开/折叠的Android TextView:ExpandableTextView
  15. EPSON ME office 700FW打印机废墨收集垫已到使用寿命解决办法
  16. osgEarth使用经纬度定义视点/设置相机跟随移动的节点
  17. 账结法 表结法 两种财务会计处理方法
  18. Autumn中文文档1:部署运行
  19. SharePoint Project导入(mpp文件导入)
  20. laravel+容联.云通讯 实现手机短信验证用户注册

热门文章

  1. HD_2037今年暑假不AC
  2. springmvc整合hibernate-validator
  3. Learn python the seventh day
  4. 前端学习---html基础知识
  5. 数据结构之通过C++来实现一个队列
  6. 排球比赛计分规则功能说明书
  7. webform(八)——LinQ简单增、删、改、查
  8. 栈的链式存储及常用操作
  9. mysql.user表中Host为%的含义
  10. C++leetcode找出两个有序数组的中位数(2)