Compare the concepts semaphore and mutex. Why would you use this? code example
Example 1: what is mutex
When I am having a big heated discussion at work, I use a rubber chicken which
I keep in my desk for just such occasions.
The person holding the chicken is the only person who is allowed to talk.
If you don't hold the chicken you cannot speak.
You can only indicate that you want the chicken and wait until you get it
before you speak.
Once you have finished speaking, you can hand the chicken back to the moderator
who will hand it to the next person to speak.
This ensures that people do not speak over each other, and also have their own
space to talk.
Replace Chicken with Mutex and person with thread and you basically have
the concept of a mutex.
Of course, there is no such thing as a rubber mutex. Only rubber chicken.
My cats once had a rubber mouse, but they ate it.
Of course, before you use the rubber chicken, you need to ask yourself whether
you actually need 5 people in one room and would it not just be easier with
one person in the room on their own doing all the work.
Actually, this is just extending the analogy, but you get the idea.
Example 2: Difference between mutex and binary semaphore
A Mutex(acquire(),release()) is different than a semaphore as
it is a locking mechanism while a semaphore(wait(),signal())
is a signalling mechanism.A binary semaphore can be used as
a Mutex but a Mutex can never be used as a semaphore.