进程的同步与互斥

现代操作系统采用多道程序设计机制,多个进程可以并发执行,CPU在进程之间来回切换,共享某些资源,提高了资源的利用率,但这也使得处理并发执行的多个进程之间的冲突和相互制约关系成为了一道难题。如果对并发进程的调度不当,则可能会出现运行结果与切换时间有关的情况,令结果不可再现,影响系统的效率和正确性,严重时还会使系统直接崩溃。


多进程的系统中避免不了进程间的相互关系。进程间的关系主要有两种:同步互斥


一、同步


同步关系,也成为直接制约关系。指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。这些线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。


一个很典型的例子就是公共汽车上司机和售票员直接的关系,如下所示:


再例如,输入进程A通过单缓冲向进程B提供数据。当该缓冲区空时,进程B不能获得所需数据而阻塞,一旦进程A将数据送入缓冲区,进程B被唤醒。反之,当缓冲区满时,进程A被阻塞,仅当进程B取走缓冲数据时,才唤醒进程A。



二、互斥

互斥关系,也称为间接制约关系。由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。


一个很典型的例子就是系统的不同的进程同时要求使用打印机,如下图所示。



三、同步和互斥的特点比较


四、临界资源和临界区

1)临界资源

一次只能被一个进程所占用的资源就是所谓的临界资源。比如:打印机。

2)临界区

访问临界资源的那段代码称为临界区。多个进程的临界区成为相关临界区。


为了保证临界资源的正确使用,可以把临界资源的访问过程分成四个部分:

①进入区。为了进入临界区使用临界资源,在进入区要检查可否进入临界区,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。

②临界区。进程中访问临界资源的那段代码,又称临界段。

③退出区。将正在访问临界区的标志清除。

④剩余区。代码中的其余部分。


使用临界区时必须遵守的规则:

①空闲让进:临界资源空闲时一定要让进程进入,不发生“互斥礼让”行为。

②忙则等待:临界资源正在使用时外面的进程等待。

③有限等待:进程等待进入临界区的时间是有限的,不会发生“饿死”的情况。

④让权等待:进程等待进入临界区是应该放弃CPU的使用。


参考资料:

http://www.eygle.com/digest/2004/12/osprocess_lock_latchs_emaphores.html

http://c.biancheng.net/cpp/html/2596.html

http://blog.jobbole.com/86709/

http://www.cnblogs.com/CareySon/archive/2012/04/14/Process-SynAndmutex.html




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缓存击穿/穿透/雪崩

缓存击穿/穿透/雪崩Intro使用缓存需要了解几个缓存问题,缓存击穿、缓存穿透以及缓存雪崩,需要了解它们产生的原因以及怎么避免,尤其是当你打算设计自己的缓存框架的时候需要考虑如何处理这些问题。缓存击穿一般的缓存系统,都是按照…

临界区、互斥量、信号量、事件的区别

四种进程或线程同步互斥的控制方法: 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4…

99%的人不知道搜索引擎的6个技巧

点击上方“dotNET全栈开发”,“设为星标”加“星标★”,每天11.50,好文必达全文约900字,预计阅读时间1分钟今天看了一期seo优化的视频,其中就有这么一篇关于百度搜索的几个小技巧,这里整理出来,…

用信号量解决进程的同步与互斥

转自:http://www.cnblogs.com/whatbeg/p/4435286.html 现代操作系统采用多道程序设计机制,多个进程可以并发执行,CPU在进程之间来回切换,共享某些资源,提高了资源的利用率,但这也使得处理并发执行的多个进程…

扎心了,程序员2017到2019经历了什么?

刷爆朋友圈的2017-2019到底是什么梗?只剩下33天了,就到2020年了最后一批90后,马上就要30了?一到年底,就会陷入回忆和比较中近几日,网友开始将2017年和2019年进行对比,不少人晒出了自己在17年和1…

【.NETCore 3】Ids4 ║ 统一角色管理(上)

前言书接上文,咱们在上周,通过一篇《思考》 性质的文章,和很多小伙伴简单的讨论了下,如何统一同步处理角色的问题,众说纷纭,这个我一会儿会在下文详细说到,而且我最终也定稿方案了。所以今天咱们…

操作系统死锁详解

一、死锁的定义 死锁是两个或两个以上的进程中的每一个都在等待其中另一个进程释放资源而被封锁,它们都无法向前推进,这种现象称为死锁。 二、产生死锁的主要原因 (1) 因为系统资源不足。 (2) 进程运行推进…

.NET Core 3.0 使用Nswag生成Api文档和客户端代码

摘要在前后端分离、Restful API盛行的年代,完美的接口文档,成了交流的纽带。在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化。下文将会演示利用Nswag如何生成Api文档利用NSwa…

什么是虚拟内存?

虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要…

深入研究 Angular 和 ASP.NET Core 3.0

本文要点:可以把多个 Angular 应用程序集成到 ASP.NET 网站中把 Angular 代码打包成 Web 组件是引导 Angular 应用程序的好方法可以把用 Angular 编写的 Web 组件轻松地集成到 ASP.NET 视图中把 Angular 解决方案构造成 Angular 应用程序的集合以实现更好的代码重用…

操作系统内存管理--简单、页式、段式、段页式

一、内存管理的目的和功能 内存一直是计算机系统中宝贵而又紧俏的资源,内存能否被有效、合理地使用,将直接影响到操作系统的性能。此外,虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理…

网易裁员背后,芸芸众生,相煎何急

十一月初拖家带口去了上海,到了著名的城隍庙参观,无意中看到了一个仅出现在历史书上的古老物件“西洋镜”,仿佛跨越百年,来到那个如裹脚布般冗长而乏味的古老年代,看到了一群有一群卑微的小民在生活的裹挟之下&#xf…

LRU和LFU的区别

一、概念介绍 LRU和LFU都是内存管理的页面置换算法。 LRU,即:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的页面。 LFU,即:最不经常使用淘汰算法(Least Frequentl…

网速和带宽的区别

为了弄清网速和带宽直接的区别,我们首先需要明白两个概念: Byte(字节)和bit(位)。 字节是计算机中用于计算存储容量的一种计量单位,简称B。一个字节由8个位组成,即: 1Byt…

.NET Core on K8S 学习与实践系列文章索引 (更新至20191126)

更新记录:-- 2019-11-26 增加Docker容器日志系列文章近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个flag:完成这个《.NET Core on K8S学习实践》系列文章!这个系列会持续…

ASP.NET Core gRPC 使用 Consul 服务注册发现

一. 前言gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍Consul。二. Consul 介绍Consul是一种服务网络解决方案&a…

网络时延——发送时延和传播时延

一、时延的定义 时延是指一个报文或分组从一个网络的一端传送到另一个端所需要的时间。它包括了发送时延,传播时延,处理时延,排队时延。 时延 发送时延 传播时延 处理时延 排队时延 一般,发送时延与传播时延是我们主要考虑的。…

Excel催化剂插件功能修复与更新汇总篇之十

在半年时间里,自己使用过程中,发现的一些小bug,更新了一下,也追加了一些自定义函数,不成系统,就单独放在修复与更新系列中。一、第24波-批量发送邮件并指点不同附件不同变量Excel催化剂功能第24波-批量发送…

OSI/RM 开放系统互联参考模型

开放式系统互联通信参考模型(即:Open System Interconnection Reference Model,简称为OSI模型,由国际标准化组织(ISO)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。 OSI的七层体…

Http benchmarking 工具 wrk 基本使用

Http benchmarking 工具 wrk 基本使用Introwrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载。它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合在一起。官方描述:wrk is a modern HTTP benchmark…