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

哈工大李治军《操作系统》进程同步与信号量笔记

1.什么是信号量?

定义:记录一些信息(即量),并根据这个信息决定睡眠还是唤醒(即信号)。睡眠和唤醒只是一个信号(相当于0和1)。

2.问题:一种资源的数量是8,这个资源对应的信号量的当前值是2,说明:(B)

A. 有2个进程等待这个资源。                //值为-2选A

B. 有2个资源可以使用。                

3.信号量:1965年,由荷兰学者Dijkstra提出的一种特殊整型变量,量用来记录,信号用来sleep和wake。

(重要)P在荷兰语里是test(检测是否有可用资源),V是increase(增加内容)。

struct semaphore
{int value;    //记录资源个数PCB *queue;    //记录等待在该信号量上的进程,使用队列存储
}P(semaphore s)    //消费资源(对应生产者生产数据占用内存)
{s.value--;if(s.value < 0) sleep(s.queue);
}V(semaphore s)    //产生资源(对应消费者从内存中取数据)
{s.value++;if(s.value <= 0) wake(s.queue);    //说明上一步value<0,存在进程等待资源,所以唤醒一个
}

4.(重点)用信号量解生产者——消费者问题

int fd = open("buffer.txt");
write(fd, 0, sizeof(int));    //写in    用文件定义共享缓冲区
write(fd, 0, sizeof(int));    //写outsemaphore full = 0;    //文件里的内容
semaphore empty = BUFFER_SIZE;    //资源的数量
semaphore mutex = 1;    //互斥(原子操作)Producer(item)
{P(empty);    //检测是否有可用资源并减1P(mutex);读入in;将item写入到in的位置上;V(mutex);V(full);    //让full的值增加
}Consumer()
{P(full);    //检测是否有内容P(mutex);读入out;从文件中的out位置读出到item;打印item;V(mutex);V(empty);    //可用资源+1
}

相关文章:

  • HOJ.编程语言管理系统
  • 肯·汤普逊:UNIX之父与现代操作系统的开路人
  • Linux解压tar.gz包的正确姿势(附赠防抓狂指南)
  • 14-DevOps-快速部署Kubernetes
  • ‌Linux trap 命令详解
  • 颠覆传统!LSTM+transformer上大分!参数直降45.5%,精度远超SOTA!
  • 测试模版x
  • 【HFP】蓝牙HFP协议中音频连接转移与拨号功能的深度解析
  • 极域教师管理CMD命令操作
  • 数智飞轮:AI时代企业增长的核心密码
  • MYSQL 常用数值函数 和 条件函数 详解
  • 微信小程序蓝牙连接打印机打印单据完整Demo【蓝牙小票打印】
  • 赶紧收藏!教您如何用 GitHub 账号,获取永久免费的 Docker 容器!!快速搭建我们的网站/应用!
  • Shell 脚本入门:从零开始写自动化脚本
  • 如何理解计算机网卡完成数据传输的串并转换
  • 5.4 AgentLite:轻量级库,便于构建任务导向的LLM Agent系统
  • Android学习总结之Glide篇(缓存和生命周期)
  • 【特殊场景应对8】LinkedIn式动态简历的利弊分析:在变革与风险间走钢丝
  • A Comprehensive Survey of Spoken Language Models
  • [自记录]一次Nvidia显卡的AI容器基础镜像制作过程(含Torch版本和ONNXRuntime版本选择)
  • 中消协发布“五一”消费提示:践行“光盘行动”,抵制餐饮浪费
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查
  • 李在明当选韩国共同民主党总统候选人
  • 文旅部副部长饶权出任国家文物局局长
  • 最高法改判一起植物新品种侵权案:判赔逾5300万元破纪录
  • 江苏、安徽跨省联动共治“样板间”:进一扇门可办两省事