从本文开始介绍进程间的通信,进程间通信遇到的问题以及方式其实和线程之间通信是一致的,所以进程间通信的所有理论知识都可以用在线程上,接下来的系列文章都会以进程之间的通信为模版进行介绍,本文主要内容:

  • 进程间通信简介(IPC)
  • 进程间的竞争条件(Race Conditions)

一、进程间通信简介

InterProcess Communication(IPC)。进程间通信主要从三个方面说:

  • 一个进程如何把信息传递个另外一个进程
  • 确保多个进程不会交叉,比如两个进程同时去订最后一张火车票,该怎么处理
  • 进程的执行顺序,比如A进程产生数据,B进程打印A产生的数据,那么A进程得先运行,B才能运行

二、进程间的竞争条件(Race Conditions)

如下图所示。

Spooler Directory是一个是一个打印机的缓存迟,当有进程想打印文件时,就将文件名字写入这个缓存池子。有一个专门的打印机定时读取这个缓存池进行,如果有文件则打印,

Out和In是两个共用变量用于标识下一个用于打印的文件的位置和下一个可以写入文件的位置,因为只有一个打印机在读取Spooler Directory,所以Out这个值永远都不会有人来竞争,接下来主要谈的是In这个变量。

  • 因为有多个进程在往Spooler Directory里面写文件,假设ProcessA写的时候,In值是6,ProcessA读到IN之后先保存在了自己的本地变量中,这个时候CPU认为PRocessA已经运行了有一段时间,打算把CPU让给刚刚启动的Process B。
  • 这个时候因为 Process A只是刚刚读取到了In,还没有写入文件,所以In的值还是6,所以Process B得到的in也是6,然后Process B把文件写入了第6个位置,且把In的值++后变为7
  • 接下来CPU又一次切换到了Process A,之前就说了,CPU切换后,被恢复的进程(线程)会从原来的状态开始继续运行,那么对于Process A来说,In还是6,Process A也把自己的文件写入到了第6个位置,且把In的值++后变为7。

问题来了:Process B的文件被Process A再第二次运行的时候覆盖了。Process B的文件不会被打印。

上述的问题就叫进程之间的竞争条件:多个进程在读写共享数据,最终的结果取决于进程的运行时间。

上面的问题很明显,把进程换成线程也会有一样的问题产生。

Operating System-进程/线程内部通信-竞争条件(Race Conditions)的更多相关文章

  1. Operating System-进程/线程内部通信-临界区(Critical Regions)

    上一篇文章讲述了进程之间的竞争条件:多个进程同时进入一个共享区域,导致了数据的不一致,本文主要介绍如何解决这个问题. 一.临界区介绍 解决这个问题就是阻止多个进程同时进入这个共享区域,换句话说,进程之 ...

  2. 理解竞争条件( Race condition)漏洞

    这几天一个叫做"Dirty COW"的linux内核竞争条件漏洞蛮火的,相关公司不但给这个漏洞起了个洋气的名字,还给它设计了logo(见下图),首页,Twitter账号以及网店.恰 ...

  3. Operating System-进程/线程内部通信-管程(Monitor)介绍,实现以及应用

    本文主要内容: 管程(Monitor)介绍 管程实现 管程应用 一.管程(Monitor)介绍 1.1 管程 前一篇文章介绍了信号量以及使用,信号量已经提供了一个方便且高效的进程同步机制,但是信号量有 ...

  4. Operating System-进程/线程内部通信-信号量、PV操作的实现和应用(解决哲学家进餐和生产者消费者问题)

    本文主要内容: 信号量的实现 利用信号量解决哲学家用餐问题 利用信号量解决生产者消费者问题 一.信号量的实现 1.1 信号量结构 typedef struct { int value; struct ...

  5. Operating System-进程/线程内部通信-信号量和PV操作

    本文介绍操作系统进程管理的两个核心概念: 信号量 PV操作 一.信号量介绍 1.1 信号量引入 信号量(Semaphore)1965年由Dijkstra引入的.信号量一般由一个值是一个变量,其值有可能 ...

  6. Golang 入门 : 竞争条件

    笔者在前文<Golang 入门 : 理解并发与并行>和<Golang 入门 : goroutine(协程)>中介绍了 Golang 对并发的原生支持以及 goroutine 的 ...

  7. Fortify Audit Workbench 笔记 Race Condition: Singleton Member Field 竞争条件:单例的成员字段

    Race Condition: Singleton Member Field 竞争条件:单例的成员字段 Abstract Servlet 成员字段可能允许一个用户查看其他用户的数据. Explanat ...

  8. linux c编程:进程控制(二)_竞争条件

    前面介绍了父子进程,如果当多个进程企图对共享数据进行处理.而最后的结果又取决于进程运行的顺序时,就认为发生了竞争关系.通过下面的例子来看下 在这里标准输出被设置为不带缓冲的,于是父子进程每输出一个字符 ...

  9. Java进程&线程(整理)

    Java进程&线程 程序:程序员写的代码,就是代码,不运行好像不会发生什么: 进程:一个进程可以理解为"运行的"一个程序,当我们启动一个java程序后,对应的jvm就会创建 ...

随机推荐

  1. 牛人blog汇总

    1.天一思维: https://blog.csdn.net/tszty1997?t=1

  2. 异常:The JSP specification requires that an attribute name is preceded by whitespace

    The JSP specification requires that an attribute name is preceded by whitespace: 其实这句话翻译就是 属性后面要必须有空 ...

  3. xlrd python excel

     xlrd python excel

  4. Symfony 使用KnpTimeBundle

    使用time_diff时出现:diff.ago.hour; 解决:1:引入"knplabs/knp-time-bundle": "^1.7",https://g ...

  5. 使用apt-get 安装后的mysql 登录问题

    当使用apt-get安装mysql后,ubuntu会自动生成一个用户名和密码.所以在第一次登陆时会报如下错误 ERROR 1045 (28000): Access denied for user 'd ...

  6. Java注释Override、Deprecated、SuppressWarnings

    在J2SE5.0的java.lang包中预定义了三个注释:Override.Deprecated和SuppressWarnings Override 这个注释的作用是标识某一个方法是否覆盖了它的父类的 ...

  7. eclipse revert resources 很慢的解决办法

    eclipse启动无响应,停留在Loading workbench状态,或老是加载不了revert resources 做开发的同学们或多或少的都会遇到eclipse启动到一定程度时,就进入灰色无响应 ...

  8. 数据库连接理解——JDBC

    需求:数据库操作 数据是:用户信息 1.连接数据库  JDBC Hibernate 2.操作数据库 c create r read u update d delete 3.关闭数据库连接 interf ...

  9. Java多线程系列 JUC线程池02 线程池原理解析(一)

    转载  http://www.cnblogs.com/skywang12345/p/3509960.html ; http://www.cnblogs.com/skywang12345/p/35099 ...

  10. Python 注释和中文乱码

    Python 注释分为三种: 1.单行注释:# 2.多行注释:前后3个单引号,或者三个双引号: 如:''' 多行注释 ''', """或者 多行注释 '"&qu ...