Skip to content

信号量机制

通过共享资源的访问控制,组织多个线程和进程进入临界区;

  • 信号量:整数变量,支持P操作申请资源 和 V操作释放资源;

P操作(Wait): 若信号量值 > 0,则将其减1,进程继续执行。 若信号量值 ≤ 0,则进程阻塞,直到信号量值变为正数。

V操作(Signal): 将信号量值加1。 若有进程因该信号量阻塞,则唤醒其中一个进程。

  • 临界资源:是指一次仅允许一个进程/线程访问的共享资源

生产者-消费者

  • 生产者:

    • 负责生成数据并放入缓冲区
    • 当缓冲区满时必须等待
  • 消费者:

    • 负责从缓冲区取出数据消费
    • 当缓冲区空时必须等待

典型信号量使用:

  • empty = N(初始空槽数)
  • full = 0(初始已用槽数)
  • mutex = 1(二进制信号量,保证互斥访问)

缓冲区:

  • 访问规则:
    • 生产者只能向空槽位写入数据
    • 消费者只能从已填充槽位读取数据
    • 同一时刻只能有一个进程操作缓冲区(通过mutex保证)

缓冲区(Buffer)是生产者-消费者问题的核心组件:

  1. 共享内存区域:作为临时存储区,用于协调生产者和消费者的速度差异

缓冲区作为共享资源需要同时满足互斥访问(mutex)和同步控制(empty/full信号量)

本站访客数 人次 本站总访问量