当前位置: 首页 > news >正文

进程互斥和进程同步

一、进程互斥

由于进程具有独立性和异步性等并发特征,计算机的资源有限,导致了进程之间的资源竞争和共享,也导致了对进程执行过程的制约。

1、临界资源和临界区(临界部分)

  • 临界资源:一次只能供一个进程访问的资源。
  • 临界区:把不允许多个并发进程交叉执行的一段程序称为临界区(critical region)或临界部分(critical section)。

临界区是由属于不同并发进程的程序段共享公用数据或公用数据变量而引起的,临界区不可能用增加硬件的方法来解决。因此,临界区也可以被称为访问公用数据的那段程序。

当一个进程使用该临界资源时,其他需要访问该资源的进程必须阻塞,直到占用者释放该资源。

2、间接制约

把这种由于共享某一公有资源而引起的在临界区内不允许并发进程交叉执行的现象,称为由共享公有资源而造成的对并发进程执行速度的间接制约。这里的“间接”二字主要是指各并发进程的速度受公有资源的制约,而非进程之间的直接制约。

3、互斥

互斥:一组并发进程中的一个或多个程序段,因共享某一公有资源而导致它们必须以一个不允许交叉执行的单位执行。也就是说,不允许两个以上的共享该资源的并发进程同时进入临界区。

一般情况下,作为程序段的一个过程不允许多个进程同时访问它。但如果该过程是纯过程,则各并发进程可以同时访问它。纯过程是指在执行过程中不改变过程自身代码的一类过程。

进程同步方法

1、临界区(Critical Section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。

  • 优点:保证在某一时刻只有一个线程能访问数据的简便办法
  • 缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

2、互斥量(Mutex):为协调共同对一个共享资源的单独访问而设计的。

互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。

  • 优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。
  • 缺点:①互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。

通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号量对象可以说是一种资源计数器。

3、信号量(Semaphore):为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了。

  • 优点:适用于对Socket(套接字)程序中线程的同步。(例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。)
  • 缺点:①信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;②信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;③核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。

4、事件(Event): 用来通知线程有一些事件已发生,从而启动后继任务的开始。

  • 优点:事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。

http://www.cnnetsun.cn/news/3712992.html

相关文章:

  • 逃离塔科夫终极离线训练器:30+功能解锁游戏新维度
  • 软件外包报价为什么差很多?先拆需求、工期和交付范围
  • ES6常用语法
  • 告别命令行踩坑!Hermes Windows 一键整合包,3 步搭建本地桌面 AI 自动化智能体
  • VMware Workstation 17 Pro安装Slackware 15.0完整指南
  • 计算机JAVA毕设实战-基于SpringBoot+Vue的校园流浪动物信息登记与救助管理平台 智慧校园流浪动物投喂救助与公示系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 洛谷P3709 大爷的字符串题 莫队
  • 编写程序,程序设定年度试错额度,额度内可以自由开展无收益的创新尝试,不用过度担忧成本。
  • 10分钟掌握vJoy:将键盘鼠标变成专业游戏手柄的完整指南
  • 【Matlab】量子力学波函数演化仿真程序
  • 【AI大模型进阶】Autograd 自动求导:别怕,你不用自己算微积分!
  • 3 连接mysql 数据库 进行数据的存储和读取
  • Agentic AI时代数据库架构演进:从数据仓库到智能决策引擎
  • 1. 准备工作
  • 服务计算--配置云桌面遇到的坑
  • 前端打包体积优化:Tree Shaking、代码分割与按需加载的深度实践
  • Q-learning在无人机三维路径规划中的MATLAB实现
  • 三菱FX5u PLC控制4轴伺服定位系统实战解析
  • RBAC表设计
  • 技术专家如何突破职业瓶颈:从编码到协作的转变
  • Oracle的sql语句3
  • 物联网安全:SE050与PIC18F46K22硬件加密方案
  • Python串口通信实战:PySerial库应用与物联网开发
  • 3步轻松下载B站视频:大会员4K和充电专属视频离线观看指南
  • 物联网设备硬件安全方案:SE050芯片实战指南
  • 【linux】CentOS 报错:There are no enabled repos;yum repolist为0,yum list 正常,yum 安装无法使用的解决方法
  • 直流、步进、伺服电机选型指南:从原理到实战,告别选型难题
  • PUBG-Logitech压枪脚本:从零开始打造你的智能射击辅助系统
  • 破局的第一性原理
  • 元素垂直居中