信号量与管程都是操作系统的并发编程机制,也是现在很多高级语言实现并发的一种底层原理。
信号量(Semaphore)
信号量机制是由大名鼎鼎的荷兰计算机科学家 Dijkstra 于1965 年提出的
操作系统的并发编程模型中,信号量(Semaphore)与锁机制(Mutex)一样都是对底层硬件同步方法的高级抽象

信号量的模型
信号量模型的组成是这样的:
- 两个成员变量:
- 整型数 count:用于记录共享资源数量
- 等待队列
- 两个基本方法:
- P() 操作:将 count - 1,若 count < 0 时,线程进入等待队列(Prolaag 荷兰语,尝试减少)
- V() 操作:将 count + 1,若 count <= 0 时,唤醒一个等待队列中的线程(Verhoog 荷兰语,增加)
对信号量模型需要注意以下几点:
- 初始化信号量时,我们指定 count 的值,之后 count 值的变化只能由 P() / V() 进行操作
- 由操作系统实现并保证 P() / V() 操作的原子性
- P() 操作是可能阻塞的,V() 操作不会阻塞
- P() / V() 操作必须成对出现

本文介绍了信号量和管程这两种操作系统中的并发编程机制。信号量由Dijkstra提出,包括P()和V()操作,用于控制共享资源访问。管程则是对信号量的改进,采用面向对象思想,通过一个锁控制互斥访问,并包含条件变量。管程模型的三种类型包括Hansen、Hoare和MESA模型,各有不同的唤醒和执行策略。
最低0.47元/天 解锁文章
908

被折叠的 条评论
为什么被折叠?



