信号量Semaphore及模型

简介: 信号量Semaphore

信号量是由大名鼎鼎的计算机科学家迪杰斯特拉(Dijkstra)于 1965 年提出,在这之后的 15 年,信号量一直都是并发编程领域的终结者,直到 1980 年管程被提出来,我们才有了第二选择。目前几乎所有支持并发编程的语言都支持信号量机制,所以学好信号量还是很有必要的。

信号量模型还是很简单的,可以简单概括为:一个计数器,一个等待队列,三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通过信号量模型提供的三个方法来访问它们,这三个方法分别是:init()、down() 和 up()。

这三个方法详细的语义具体如下所示。
init():设置计数器的初始值。
down():计数器的值减 1;如果此时计数器的值小于 0,则当前线程将被阻塞,否则当前线程可以继续执行。
up():计数器的值加 1;如果此时计数器的值小于或者等于 0,则唤醒等待队列中的一个线程,并将其从等待队列中移除。
这里提到的 init()、down() 和 up() 三个方法都是原子性的,并且这个原子性是由信号量模型的实现方保证的。在 Java SDK 里面,信号量模型是由 java.util.concurrent.Semaphore 实现的,Semaphore 这个类能够保证这三个方法都是原子操作。

目录
相关文章
|
10月前
|
安全
理解信号量
理解信号量
|
1天前
|
Java
JAVA并发编程系列(7)Semaphore信号量剖析
腾讯T2面试,要求在3分钟内用不超过20行代码模拟地铁安检进站过程。题目设定10个安检口,100人排队,每人安检需5秒。实际中,这种题目主要考察并发编程能力,特别是多个线程如何共享有限资源。今天我们使用信号量(Semaphore)实现,限制同时进站的人数,并通过信号量控制排队和进站流程。并详细剖析信号量核心原理和源码。
|
4月前
信号量(Semaphore)与线程计数器(CountDownLatch)(详解)
信号量(Semaphore)与线程计数器(CountDownLatch)(详解)
58 0
信号量(Semaphore)与线程计数器(CountDownLatch)(详解)
|
4月前
多线程并发之Semaphore(信号量)使用详解
多线程并发之Semaphore(信号量)使用详解
1321 0
|
10月前
|
算法
信号量(上)
信号量(上)
32 0
|
10月前
|
存储
信号量(下)
信号量(下)
33 0
|
12月前
|
Java Go 数据库
Semaphore-带权重的信号量
Semaphore-带权重的信号量
88 1
|
机器学习/深度学习 C语言
信号量
信号量
77 0
|
Java 数据库连接 API
【JUC】信号量Semaphore详解
【JUC】信号量Semaphore详解
158 0
【JUC】信号量Semaphore详解
Semaphore(信号量)介绍以及实例
Semaphore(信号量)介绍以及实例
165 0
Semaphore(信号量)介绍以及实例