首页 > 其他分享 >10. Semaphore ||(信号量)

10. Semaphore ||(信号量)

时间:2024-04-26 10:57:43浏览次数:11  
标签:10 消费者 信号量 线程 Semaphore 缓冲区 售票员 empty

信号量实现同步


举个例子

  1. 在这里司机启动车辆需要售票员关车门,售票员开车门需要司机到站停车。
  2. 对于这两个线程来说
  • 需要设置两个semaphore d=0;semaphore c=0;
  • 为什么呢,因为有执行顺序的问题,只有售票员关门时候才可以启动车辆,设置一个d=0,司机启动汽车时候,这个线程执行p(d)来检测,当为d=0,会进入等待的状态。当售票员关门之后,这个线程执行V(d)操作,d++。这时司机执行p(d),就可以跳过等待状态,去启动车辆了。
  • 同时售票员开车门需要司机到站停车也是这个道理,还需要另一个semaphore c=0;
  1. 为什么初始化为0:
    阻塞机制: 信号量初始化为0是为了确保在相应的操作(如关闭门或到站停车)完成之前,相关的线程(如司机或售票员)会处于等待状态。这种初始化方式确保了操作的先后顺序,防止了例如司机在门未关闭时启动车辆的情况,从而确保了系统的安全性和正确性。
  2. 同步问题
  • 同步问题实质是将异步的并发进程按照某种顺序执行;
  • 解决同步的本质就是要找到并发进程的交互点,利用P操作的等待特点来调节进程的执行速度。
  • 通常初始值为0的信号量可以让进程直接进行等待状态,直到另一个进程唤醒他。

经典同步问题

生产消费者问题

  1. 生产者(p)与消费者(c)共用一个缓冲区,生产者不能往“满”的缓冲区中放产品,消费者不能从“空”的缓冲区中取产品。
Semaphore empty =1;//signal for producer
Semaphore empty=0;//signal for producer
Producer {
  while(true){
  make a product;
  P(empty);
  put the product into buffer;
  V(full);
}
}
Consumer{
  while(true){
  P(full);
  pick product from buffer;
  V(empty);
  consume the product;
}
}
  • 这种方式是按照一定顺序执行的。
  1. the bounded-buffer problem(有界缓冲区)
  • 有界缓冲区问题,两个线程“生产者”和“消费者”,同时使用一个固定长度的大小的缓冲区,生产者的主要是放入一定数量的数据到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。
  • producer_i或consumer_i中的i表明有多个生产者和消费者,在许多个生产和消费者线程中,还需要解决当多个生产线程同时进入临界区,多个消费线程进入临界区。这些情况还是需要使用互斥锁。
  • 重要注意事件
    • 不要随意扩大临界区
    • empty和full的p,v操作不在同一个进程(同步信号量)
    • mutex的p,v操作在同一个进程(互斥信号量)

苹果橘子问题

  • 问题描述
  • 解决方案
    • 需要去分析多个生产者和消费者之间的关系。首先是协作关系,生产苹果的与消费苹果的是协作关系,生产橘子与消费橘子是协作关系。生产苹果与橘子之间又是竞争关系。
    • 在代码中利用这种关系,V(sp)是消费者结束后,让生产者去竞争。这个方式刚好解决了问题。

标签:10,消费者,信号量,线程,Semaphore,缓冲区,售票员,empty
From: https://www.cnblogs.com/zhudachang/p/18158478

相关文章

  • 记 Intel 的 31.0.101.5186 版本驱动带崩 WPF 程序
    本文记录一个Intel显卡驱动问题,暂时只在IntelUHDGraphics770显卡带31.0.101.5186版本的显卡驱动时,才概率复现问题显卡驱动31.0.101.5186版本是在2024.01.24之前发布的,在出现问题的设备上的表现是,运行任何的WPF应用程序,都会闪崩,最多窗口创建出来,但是没有任何窗口内......
  • 2023最新!MySQL8于win10环境下的安装配置保姆级教程
    2023最新!MySQL8于win10环境下的安装配置保姆级教程MySQL官网:https://www.mysql.com/downloads/导航目录2023最新!MySQL8于win10环境下的安装配置保姆级教程导航一、MySQL下载二、安装MySQLchoosingaSetupTypeselectproductsdownloadselectfeaturestoinstallInstallation......
  • 2024年vue 开发环境 Node.js于win10环境下的安装
    2024年vue开发环境Node.js于win10环境下的安装导航2024年vue开发环境Node.js于win10环境下的安装导航一、下载node.js二、安装node.js三、测试(一)四、环境配置五、测试(二)六、安装淘宝镜像七、安装vue脚手架一、下载node.jsNode.js官方网站下载:https://nodejs.org/en......
  • 2023年最新!Tomcat8.5于win10环境下的安装配置
    2023年最新!Tomcat8.5于win10环境下的安装配置Tomcat官网导航目录2023年最新!Tomcat8.5于win10环境下的安装配置导航一、检查JDK二、下载Tomcat三、配置环境变量四、启动Tomcat一、检查JDK按下win+r输入cmd并回车,在命令行窗口输入java-version,若出现相关信息则可以继续,没有......
  • 2024年JAVA1.8于window10系统下的安装安装
    2024年JAVA1.8于window10系统下的安装安装导航2024年JAVA1.8于window10系统下的安装安装导航一、下载JAVA1.8二、安装JAVA1.8三、配置环境一、下载JAVA1.8Oracle官网各历史版本:https://www.oracle.com/cn/java/technologies/downloads/archive/首先,我们选择这个版本......
  • win10加入域环境
    win10加入域环境导航目录win10加入域环境导航一、关闭防火墙二、使客户端的电脑指向于域控服务器三、检验是否加入了域一、关闭防火墙在进行加入域服务之前,我们需要先关闭防火墙(为了不必要的麻烦)按win+r调出运行窗口,输入control打开控制面板点击系统和安全点击win......
  • 100种分析思维模型之:故事思维
    在2023年高考作文的新课标I卷中,有这么一段话:好的故事,可以帮我们更好地表达和沟通,可以触动心灵、启迪智慧;好的故事,可以改变一个人的命运,可以展现一个民族的形象……故事是有力量的。这段话引发了你怎样的联想和思考?下面介绍100种分析思维模型的第58种:故事思维,它可以帮助......
  • ROS1学习记录(10.0)
    学习视频:17.ROS中的坐标系管理系统_哔哩哔哩_bilibili 先要安装TF功能包:要依据自己ROS版本来安装先查询ROS版本:rosversion-dsudoapt-getinstallros-noetic-turtle-tf      /*讲install后面第二个单词改为自己对应版本*/因为版本与视频使用有所不同要增加......
  • 【前端求必看】10年资深前端工程师,聊点行业现状与自我突破!
    作为一名拥有10年前端开发经验的资深工程师,曾在蚂蚁金服等一线大厂历练,现在则在一家上市公司享受较为宽松的工作节奏。今天,我想和大家聊聊前端开发的就业现状,以及如何在这个竞争激烈的市场中突出重围。找工作切记“眼高手低”,清晰自己的方向路径,有些东西都会成为你往更高方向的跳......
  • Prometheus连接Alertmanager报错410
        ......