信号量与管程都是操作系统的并发编程机制,也是现在很多高级语言实现并发的一种底层原理。

信号量(Semaphore)

信号量机制是由大名鼎鼎的荷兰计算机科学家 Dijkstra 于1965 年提出的

操作系统的并发编程模型中,信号量(Semaphore)与锁机制(Mutex)一样都是对底层硬件同步方法的高级抽象

image-20200624181218815

信号量的模型

信号量模型的组成是这样的:

对信号量模型需要注意以下几点:

信号量机制相比于锁机制的一个主要区别是:信号量机制允许多个线程同时访问一个临界区

因为只要 count 符合条件,那么线程就可以访问临界区资源

信号量机制也存在一些缺点,那就是真正使用起来比较困难,因为当我们需要解决的同步问题越复杂,条件越多,那么需要的信号量就越多,需要更加谨慎地处理信号量之间的处理顺序否则很容易造成死锁现象。

管程(Monitor)

管程是一种在信号量机制上进行改进的并发编程模型

image-20200624190533141

管程模型

管程的组成如下:

注意:在入口等待队列中的线程,都是条件满足情况未知曾经满足过条件的线程,它们等待管程的新一轮执行,而条件变量的等待队列中的线程必须等到满足该条件后才可以重新回到入口等待队列中去

管程模型相较于信号量模型的好处就是:易用,它可以把多个同步条件的操作都集中在一个模块里,从而简化同步机制的实现难度

管程的模型可以分为三类:

参考资料

  1. 操作系统,向勇,清华大学,第十八讲
  2. Java并发编程实战,王宝令,极客时间
赞 赏
真诚赞赏 手有余香
用微信请DangHT喝杯咖啡?

微信支付

用支付宝请DangHT喝杯咖啡?

支付宝