当前位置: 首页 > 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 值的增减以及对等待队列中进程的阻塞和唤醒,实现了对资源的合理分配与管理,保障了进程间的同步与互斥 。

http://www.xdnf.cn/news/718597.html

相关文章:

  • 未来楼宇自控系统升级优化,为绿色建筑发展注入更强动力支撑
  • 大模型应用开发之评估
  • 浅谈学习(费曼学习法)
  • 四叉树实现四边形网格
  • OpenGL —— 2.9.1、摄像机之模拟CS鼠标视角转动,可切换线框模式显示(附源码,glfw+glad)
  • 力扣刷题Day 64:括号生成(22)
  • 什么是物化视图(Materialized View)?
  • Redis的大Key问题如何解决?
  • [预训练]Encoder-only架构的预训练任务核心机制
  • 【Day39】
  • 【Doris基础】Apache Doris数据模型全面解析:选择最适合你的数据组织方式
  • ProfibusDP转DeviceNet协议转换网关应用于S7-300PLC控制埃斯顿DeviceNet焊机项目
  • unity—特效闪光衣服的设置
  • 亚马逊桌布运营中的利润核算与优化:从成本管控到决策升级
  • MonoPCC:用于内窥镜图像单目深度估计的光度不变循环约束|文献速递-深度学习医疗AI最新文献
  • 5.3.1_2二叉树的层次遍历
  • 博客摘录「 Activiti7工作流引擎:基础篇(二) 自动生成表结构」2024年9月13日
  • 更换Homebrew 源
  • 【C/C++】闭包的几个用处
  • 如何用Go创建一个 deployment 到容器拉起来的全流程
  • python 制作复杂表格报告
  • Java 开发上门家政系统源码:全流程数字化管理,适配家政公司 / 个体户接单派单
  • MTK平台-- wifi 暗屏待机 low power问题分析
  • 自增长主键的优缺点分析
  • 20中数组去重的方法20种数组去重的方法
  • 在Start routine里替换掉source package里面的non-ASCII字符
  • 25平航杯复现
  • React 第四十九节 Router中useNavigation的具体使用详解及注意事项
  • 可视化图解算法47:包含min函数的栈
  • 一种监控录像视频恢复的高效解决方案,从每一帧中寻找可能性