there is no real reason ever to have a binary semaphore as everything that a
binary semaphore can do can also be done by a ReentrantLock
If all you need is reentrant mutual exclusion, then yes, there is no reason to use a binary semaphore over a ReentrantLock. If for any reason you need non-ownership-release semantics then obviously semaphore is your only choice.
Also since reentrant locks also provide one lock per object, isn’t it
always a better idea to prefer a reentrant lock to a binary semaphore?
It depends on the need. Like previously explained, if you need a simple mutex, then don’t choose a semaphore. If more than one thread (but a limited number) can enter a critical section you can do this through either thread-confinement or a semaphore.
I have checked a post here that talks about difference between a
binary semaphore and a mutex but is there a thing like a mutex in
Java?
ReentrantLock
and synchronized
are examples of mutexes in Java.