信号量机制

信号量机制

1965年由荷兰学者 Dijkstra 提出

image


一、概念

用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。

信号量甚实就是一个变量(可以是一个整数,也可以是更复杂的(数据结构)记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为 1 的信号量。

一对原语:

可以把原语理解为我们自己写的函数,函数名分别为 wait 和 signal, 括号里的信号量 S 其实就是函数调用时传入的一个参数。wait 、 signal 原语常简称为 P、V 操作(来自荷兰语 proberen 和 verhogen )。因此,做题的时候常把 wait(s) 、signal(S) 两个操作分别写为 P(S) 、 V(S)

  • wait(S) 原语 (P 操作):检查资源情况并占用一个资源
  • signal(S) 原语 (V 操作):释放产生一个资源

注:以下两种信号量的相关代码仅为伪代码逻辑实现,实际不算特别严谨(原子性等相关方面)

二、整型信号量

重点: 仍然不满足“让权等待”原则(有while存在,会发生“忙等”)

image

三、记录型信号量

重点: 解决了“忙等”问题,使用比整型复杂的数据结构

image

简单使用案例:

image

posted @   Wind_730  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示