信号量与管程都是操作系统的并发编程机制,也是现在很多高级语言实现并发的一种底层原理。
信号量(Semaphore)
信号量机制是由大名鼎鼎的荷兰计算机科学家 Dijkstra 于1965 年提出的
操作系统的并发编程模型中,信号量(Semaphore)与锁机制(Mutex)一样都是对底层硬件同步方法的高级抽象
信号量的模型
信号量模型的组成是这样的:
- 两个成员变量:
- 整型数 count:用于记录共享资源数量
- 等待队列
- 两个基本方法:
- P() 操作:将 count - 1,若 count < 0 时,线程进入等待队列(Prolaag 荷兰语,尝试减少)
- V() 操作:将 count + 1,若 count <= 0 时,唤醒一个等待队列中的线程(Verhoog 荷兰语,增加)
对信号量模型需要注意以下几点:
- 初始化信号量时,我们指定 count 的值,之后 count 值的变化只能由 P() / V