本文共 838 字,大约阅读时间需要 2 分钟。
信号量及其应用
信号量(Semaphore)是一种核心原子操作机制,用于管理多个进程或线程对共享资源的访问。在多进程或多线程系统中,当资源有限时,信号量能有效协调并同步各个执行流的访问,避免内容冲突或死锁。
信号量的组成
信号量核心基于一个计数器(Counter)和硬件布局(PCB上的等待队列和接口)。主要包含以下三个部分:
计数器:用于记录当前资源的可用数量。
- 当执行流成功获取信号量时,计数器减1。
- 获取失败时,执行流进入等待队列,同时计数器减1。
- 释放信号量时,计数器加1,并通知等待队列中的执行流。
接口:提供操作信号量的接口。
- sem_init:初始化信号量,routeParams指定资源共享方式,value指定初始资源数量。
- sem_wait:执行流等待信号量,减少计数器,若造成负值则阻塞到等待队列。
- sem_post:执行流释放信号量,增加计数器。
- sem_destroy:销毁信号量,释放相关资源。
信号量的互斥与同步
信号量同时支持互斥和同步:
- 互斥:通过计数器确保只有一个执行流访问资源。-初始化计数器为1,表示一个资源可用。当执行流获取成功后,计数器变为0,阻止其他执行流立即访问。
- 同步:不仅限于1的计数,也能支持多个执行流访问。-执行流先获取信号量,若计数器>0,即可立即访问资源。-若计数器≤0,则执行流进入等待队列,并待释放后再继续。
资源竞争与信号量管理
在资源竞争激烈的环境中,信号量能有效避免资源拥堵:
- 当一个执行流完成任务后,通过
sem_post释放信号量,增加计数器,并通知等待队列中的其他执行流继续使用资源。 - 允许资源多个执行流同时等待,可以灵活应对资源使用需求波动。
生产者与消费者模型
生产者(上图蓝色瓷砖)生成资源,通过信号量通知消费者(上图红色瓷砖)开始消费:
- 生产者分离空闲信号量,触发消费者的等待。
- 消费者执行任务后,将信号量释放,进入生产者状态。
这种模型可扩展到更复杂的生产消费场景,通过信号量实现高效资源调度。
转载地址:http://kiacz.baihongyu.com/