信号量

#信号量机制

--

  • 用户进程可以使用操作系统提供的一对原语来对信号量进行操作,从而便于实现进程互斥,进程同步
  • *信号量就是一个变量*(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量
  • 原语,多次介绍了,不懂自己搜
  • *一对原语*:wait(S)原语和signal(S)原语,理解成普通函数就行
  • wait,signal,原语常称为P,V操作,故一般写作P(S),V(S)
  • #整型信号量

    --

  • 用一个整数型的变量作为信号量,用来表示系统中某种资源的数量
  • Pasted image 20260630201121.png
  • 逻辑上和双标志先检查法差不多
  • 区别就在于,信号量是原语操作的,执行起来一气呵成,不会因切换进程而炸缸
  • #记录型信号量

    --

  • Pasted image 20260630201744.png
  • 可见其结构中多了一个等待队列,这是件好事
  • 也是解决“忙等”问题的关键
  • Pasted image 20260630201837.png
  • P,V操作综上,P操作中多了一个*block函数*,V操作中多了一个*wakeup*函数
  • *block函数会将进程从运行态挂到阻塞队列*
  • *wakeup函数则会唤醒阻塞队列里的一个进程,将该进程变为就绪态*
  • 如此一来就解决了“忙等”
  • Pasted image 20260630202837.png
  • 我觉得这个理解起来,实在不难,你自己看看办吧