没有真正的理由拥有二进制信号量,因为二进制信号量可以做的所有事情也可以由ReentrantLock完成
如果您所需要的只是可重入互斥,那么是的,没有理由在ReentrantLock上使用二进制信号量。如果出于任何原因需要非所有权释放语义,那么显然信号灯是您唯一的选择。
另外,由于可重入锁还为每个对象提供一个锁,所以优先选择可重入锁而不是二进制信号量总是更好的主意吗?
这取决于需要。如前所述,如果您需要一个简单的互斥量,则不要选择信号量。如果一个以上的线程(但数量有限)可以进入关键部分,则可以通过线程限制或信号量来执行此操作。
我在这里检查了一篇文章,该文章讨论了二进制信号量和互斥锁之间的区别,但是在Java中是否有像互斥锁这样的东西?
ReentrantLock而
synchronized在Java互斥的例子。



