首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统的信号量和Java给出的信号量之间有什么区别?

操作系统的信号量和Java给出的信号量之间有什么区别?
EN

Stack Overflow用户
提问于 2014-11-20 15:40:20
回答 2查看 464关注 0票数 1

在操作系统中,Semaphore是一种基本的同步模式。因此,对于并发性,我们要么使用Semaphore,要么使用Mutex

但是,在Java中,我在“Concurrent Programming in Java by Doug Lea”一书中读到,基本的同步模式是为每个对象实现的Monitor (Lock and WaitSet)。只是在Java5中添加了Semaphores (以及Locks和其他并发类)。

那么,这个Semaphore与操作系统(比如Semaphore of PThread库)提供的那个有什么不同呢?

java是否使用OS信号量来实现其对象监视器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-20 16:04:00

线程和Java锁之间的主要区别是,Java的对应方是重入。这意味着,在Java中,如果您获得了已经获得的锁,则不会发生死锁(请注意,p线程也可能具有可重入实现)。

注意,Java类的现代实现(以及来自Semaphore包的其他类)直接使用比较和交换等CPU指令,而不是操作系统提供的系统调用(如果硬件不支持,则使用类似的指令)。

票数 0
EN

Stack Overflow用户

发布于 2014-11-20 21:09:13

只有在Java 5中才添加信号量.

信号量是一个非常古老的概念。有很多老代码和老算法使用信号量。如果您想将一些旧代码移植到Java,可以使用java.util.concurrent.Semaphore而不是编写自己的代码。

我只是在这里猜测,但我敢打赌,这是他们将Semaphore添加到库中的主要原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27043567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档