信号量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 这个类能够保证这三个方法都是原子操作。

目录
相关文章
|
JavaScript 前端开发 Java
Unicode转义(\uXXXX)的编码和解码
  在涉及Web前端开发时, 有时会遇到\uXXXX格式表示的字符, 其中XXXX是16进制数字的字符串表示形式, 在js中这个叫Unicode转义字符, 和\n \r同属于转义字符. 在其他语言中也有类似的, 可能还有其它变形的格式.
3083 0
|
存储 安全 编译器
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
1307 1
|
安全 Java 网络安全
构建一个安全的电子商务平台
【8月更文挑战第13天】构建一个安全的电子商务平台需要从多个方面入手,包括选用安全的开发语言和框架、强化数据加密与认证机制、构建安全的支付系统、加强服务器与网络安全、遵循安全标准和法规、定期进行安全审计与培训以及建立应急响应与灾难恢复机制等。只有全面考虑并落实这些最佳实践,才能确保电子商务平台的安全性和可靠性。
|
开发框架 Dart JavaScript
深入探讨Flutter中的Web支持功能,以及如何利用Flutter构建跨平台Web应用的最佳实践
【6月更文挑战第11天】Flutter,Google的开源跨平台框架,已延伸至Web支持,让开发者能用同一代码库构建移动和Web应用。Flutter Web基于Dart转JavaScript,利用WebAssembly和JavaScript在Web上运行。构建Web应用最佳实践包括选择合适项目、优化性能、进行兼容性测试和利用Flutter的声明式UI、热重载等优势。尽管性能挑战存在,Flutter Web为跨平台开发提供了更多机会和潜力。
413 1
|
网络协议 安全 网络安全
【专栏】IPv6是为解决IPv4地址不足、安全性和配置复杂性问题而提出的下一代互联网协议
【4月更文挑战第28天】IPv6是为解决IPv4地址不足、安全性和配置复杂性问题而提出的下一代互联网协议。它提供128位地址空间(几乎无限)、简化报文格式、内置IPsec安全机制、自动配置能力及增强的QoS。IPv6的优势包括更高的传输效率、更强的安全性、移动性和组播功能,以及即插即用的设备。然而,部署面临IPv4兼容性、技术更新、经济驱动和安全挑战。随着技术发展,IPv6的普及将成为必然趋势。
1442 1
|
前端开发 Java 数据库连接
一篇告诉你什么是Spring
一篇告诉你什么是Spring
371 0
|
Oracle 安全 Java
JDK收费的各个版本(记录一下)
JDK收费的各个版本(记录一下)
13577 1
|
域名解析 Java Go
实现阿里云域名的DDNS
实现阿里云域名的DDNS
23720 6
|
前端开发 Java 数据库
手把手教你使用Spring Boot从零开始制作用户注册登录功能
手把手教你使用Spring Boot从零开始制作用户注册登录功能
7272 2
手把手教你使用Spring Boot从零开始制作用户注册登录功能
|
数据采集
宏基因组数据 数据预处理
宏基因组下载数据过程
492 2

热门文章

最新文章