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

进程同步机制-信号量机制-记录型信号量机制中的的wait和signal操作

waitsignal是记录型信号量机制中用于实现进程同步与互斥的两个重要操作,

wait 操作

wait(semaphores *S) {S->value --;if (S->value<0) block(S->list)
}
  • 请求资源S->value --; 这一步表示进程请求一个单位的资源,将信号量 S 的 value 值减 1 。比如信号量原本表示有 3 个空闲资源(value 为 3 ) ,执行这一步后,就表示剩余 2 个空闲资源 。
  • 判断与阻塞if (S->value<0) block(S->list) ,在资源数量减少后,判断 value 值是否小于 0 。如果 value 小于 0 ,说明当前没有足够的空闲资源供进程使用 。此时,block(S->list) 操作会将该进程阻塞,并把进程放入信号量 S 的等待队列 list 中 。例如,value 初始为 1 ,有两个进程先后执行 wait 操作,第一个进程执行后 value 变为 0 ,还能获取资源;第二个进程执行后 value 变为 -1 ,就会被阻塞放入等待队列 。
  • block方法:作用是将调用它的进程挂起,使其从运行态进入阻塞态 。在 wait 操作中,当信号量 S->value 小于 0 ,意味着没有足够资源,此时调用 block(S->list) ,把该进程添加到信号量 S 的等待队列 list 里 ,让其等待资源可用 。比如餐厅没座位了,顾客就得在候座区排队等待 。

signal 操作

signal(semaphores *S) {S->value++;if (S->value<=0) wakeup(S->list);
}
  • 释放资源S->value++; 表示进程释放一个单位的资源,将信号量 S 的 value 值加 1 。假设信号量 value 原本为 -2 (表示有 2 个进程在等待资源 ) ,执行这一步后,value 变为 -1 ,代表还有 1 个进程在等待,但资源数量增加了 。
  • 唤醒进程if (S->value<=0) wakeup(S->list); ,在资源数量增加后,判断 value 值是否小于等于 0 。如果 value 小于等于 0 ,说明等待队列中还有进程在等待资源 ,wakeup(S->list) 操作会从等待队列 list 中唤醒一个进程 ,让其有机会重新获取资源并继续执行 。比如 value 为 -1 时,执行此操作就会唤醒一个等待的进程 。
  • wakeup方法:功能是唤醒处于阻塞态的进程 。在 signal 操作里,当信号量 S->value 加 1 后小于等于 0 ,表明等待队列有进程在等资源,执行 wakeup(S->list) ,从等待队列中唤醒一个进程 ,让其从阻塞态变为就绪态 ,获得再次竞争 CPU 执行的机会 。就像餐厅有座位空出来,服务员从候座区叫一位顾客去就餐 。

总体而言,waitsignal操作通过对信号量 value 值的增减以及对等待队列中进程的阻塞和唤醒,实现了对资源的合理分配与管理,保障了进程间的同步与互斥 。

相关文章:

  • 【Python办公】将Excel表格转json(字典)数据-可自定义key和value
  • Photoshop2025(PS2025)软件及安装教程
  • nlp中的频率就是权重吗
  • XPlifeapp:高效打印,便捷生活
  • 不可变集合类型转换异常
  • Cursor完整安装和使用指南
  • 华为云Flexus+DeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤
  • Vue2部分知识点和注意项
  • 鸿蒙分辨率
  • 远程调用 | OpenFeign+LoadBalanced的使用
  • mongodb源码分析session接受客户端find命令过程
  • 基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计
  • spring IOC控制反转
  • Python 连接 MinIO (一)
  • 2.2 在javaweb开发中常见后缀文件名的简单理解
  • kali系统的安装及配置
  • python打卡day39
  • MySQL入门笔记
  • mac电脑安装nvm
  • 一个超简易的RMAN备份并保留到异地的方案,仅适用于小规模环境
  • 做网站1008做网站 - 百度/项目推广网站
  • 在网站后台做网页/网络运营
  • 鄂州做网站公司/91永久海外地域网名
  • hao123网址怎么删除/seo基础课程
  • php在线做网站/网站推广的公司
  • 网站的mysql数据库放到服务器上服务器需要安装mysql吗?/百度云搜索引擎