Aimee

personal blog

欢迎来到我的个人站~


操作系统

信号量

  • 抽象数据类型:
    • P(): sem减1,if sem < 0 waiting , else continue
    • V(): sem加1,if sem <= 0 唤醒一个等待的P
  • 信号量是正数,被保护的变量
    • 初始化完成之后,唯一能够改变一个信号量的值的办法是通过P()和V()
    • 操作必须是原子的,P()能够被阻塞,而V()不会阻塞
  • 什么是管程
    • 一个锁:指定临界区
    • 0或者多个条件变量: 等待/通知信号量用于管理并发访问共享数据
  • 一般方法:
    • 收集在对象/模块中的相关共享数据
    • 定义方法来访问共享数据
  • lock
    • Lock::Acquire() - 等待直到锁可用,然后抢占锁
    • Look::Release() - 释放锁,唤醒等待者如果有
  • Condition Variable
    • 允许处于等待状态进入临界区
      • 允许处于等待(睡眠)的线程进入临界区
      • 某个时刻原子释放锁进入睡眠
    • Wait() operation
      • 释放锁,睡眠,重新获得锁返回后
    • Signal() operation (or broadcast() operation)
      • 唤醒等待者(或者所有等待者),如果有