信号量机制
通过共享资源的访问控制,组织多个线程和进程进入临界区;
- 信号量:整数变量,支持P操作申请资源 和 V操作释放资源;
P操作(Wait): 若信号量值 > 0,则将其减1,进程继续执行。 若信号量值 ≤ 0,则进程阻塞,直到信号量值变为正数。
V操作(Signal): 将信号量值加1。 若有进程因该信号量阻塞,则唤醒其中一个进程。
- 临界资源:是指一次仅允许一个进程/线程访问的共享资源
生产者-消费者
生产者:
- 负责生成数据并放入缓冲区
- 当缓冲区满时必须等待
消费者:
- 负责从缓冲区取出数据消费
- 当缓冲区空时必须等待
典型信号量使用:
- empty = N(初始空槽数)
- full = 0(初始已用槽数)
- mutex = 1(二进制信号量,保证互斥访问)
缓冲区:
- 访问规则:
- 生产者只能向空槽位写入数据
- 消费者只能从已填充槽位读取数据
- 同一时刻只能有一个进程操作缓冲区(通过mutex保证)
缓冲区(Buffer)是生产者-消费者问题的核心组件:
- 共享内存区域:作为临时存储区,用于协调生产者和消费者的速度差异
缓冲区作为共享资源需要同时满足互斥访问(mutex)和同步控制(empty/full信号量)