当前位置:网站首页 > 编程语言 > 正文

进程控制原语6种方法(进程控制原语6种方法)



如何在进程间传递信息?

如何防止两个进程冲突?

如何实现进程执行的先后顺序?

多个进程访问一个共享数据,而数据最后的值由进程访问的先后顺序决定。

竞争条件的例子

输出: 指向下一个待打印的文件

输入: 指向下一个空位,in =7.

(1): 进程 A 读 in 且将值 7 保存在一个局部变量.   进程A 切换到进程B.

(2): 进程B读in, 将文件名保存在空位 7 且更新in 的值为 8.

(3): 进程 A 将文件名保存到空位 7且更新 in 的值为 8.

空位 7 所保存的文件名不确定,取决于谁最后完成,这导致竞争条件发生。

  1. 临界资源:互斥共享变量所代表的资源,即一次只能被一个进程使用的资源;
  2. 临界区指并发程序中与互斥共享变量相关的程序段;
  3. 防止竞争条件的思想:禁止多个进程同时读和写共享数据,即同时进入临界区。

好的解决方案满足的四个条件:

  1. 没有进程同时在临界区;
  2. 不假设CPU的速度和数量;
  3. 临界区外运行的进程不得阻塞其他进程;
  4. 不会导致有进程永远在临界区外面等待。

只有发生中断的时候,CPU 才会切换进程。因此,如果屏蔽中断,就不会发生切换了。

这个不太好,一个进程关了中断之后不开怎么办?

Problem?

如果一个进程执行完while条件判断后突然发生了切换,lock = 1尚未执行, 则两个进程都会进入临界区。

问题:效率不高,有限制。

几乎完美,但是有忙等待现象!

该硬件支持一种特殊指令 TSL, 其能够不可分割地完成两个任务:

(a)将一个内存值保存到CPU寄存器;

(b)将该内存值设置为1。

忙等待

  • 一个进程一直占用CPU测试循环的条件,直到测试条件为真。
  • 浪费CPU;
  • 导致优先级反转问题
  • 从忙等待到阻塞...
  • 睡眠是一个系统调用,使得调用者阻塞自己直到另外的进程唤醒该进程。
  • 唤醒调用唤醒指定的进程。

习题:

设与某资源相关联的信号量初值为3,当前值为2,若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别为(D  )

下一个笔记的内容是信号量相关的,可以移步看一下~

到此这篇进程控制原语6种方法(进程控制原语6种方法)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • wifi字典安卓(wifi字典破解安卓)2025-02-13 20:36:07
  • 预适应训练仪多少钱一台(预适应训练仪出厂价格)2025-02-13 20:36:07
  • 苹果手机圈一怎么打出来(苹果手机圈二怎么打)2025-02-13 20:36:07
  • yml文件下载(.yml文件)2025-02-13 20:36:07
  • 返回下一级目录(返回上级目录)2025-02-13 20:36:07
  • bt1120接口定义8位y信号(bt1120接口原理)2025-02-13 20:36:07
  • 左斜杠(左斜杠和右斜杠有什么区别)2025-02-13 20:36:07
  • 主板nvme接口坏了(nvme接口针脚定义)2025-02-13 20:36:07
  • 绿色代码是什么颜色(绿色的代码表示什么)2025-02-13 20:36:07
  • 查nat类型(nat类型查询网站)2025-02-13 20:36:07
  • 全屏图片