我还没有使用Semaphore
足够奇怪的......
无论如何我正在审查一些使用它的代码,并看到与锁不同,许可证可以由另一个线程释放(即没有所有权)。
我看了看Concurrency in Action
,上面写着(第 98 页):
该实现没有实际的许可对象......所以一个线程获得的许可可以被另一个线程释放
我之前没有注意到这个细节,并查看了我所说的操作系统教科书(我的重点):
当一个进程修改信号量值时,没有其他进程 ....etc
那么这是 Java 特定的设计决策吗?我的意思是信号量不属于线程。
还是我误解了信号量的概念?
注意:这不是一个好/坏设计等问题。我只是想确保我理解这个概念