Difference between Mutex and Semaphore

Mutex:

Is a key to a toilet. One person can have the key - occupy the toilet - at the time. When finished, the person gives (frees) the key to the next person in the queue.


Officially: “Mutexes are typically used to serialise access to a section of re-entrant code that cannot be executed concurrently by more than one thread. A mutex object only allows one thread into a controlled section, forcing other threads which attempt to gain access to that section to wait until the first thread has exited from that section.”

Ref: Symbian Developer Library

(A mutex is really a semaphore with value 1.)

Semaphore:

Is the number of free identical toilet keys. Example, say we have four toilets with identical locks and keys. The semaphore count - the count of keys - is set to 4 at beginning (all four toilets are free), then the count value is decremented as people are coming in. If all toilets are full, ie. there are no free keys left, the semaphore count is 0. Now, when eq. one person leaves the toilet, semaphore is increased to 1 (one free key), and given to the next person in the queue.

Officially: “A semaphore restricts the number of simultaneous users of a shared resource up to a maximum number. Threads can request access to the resource (decrementing the semaphore), and can signal that they have finished using the resource (incrementing the semaphore).”
Ref: Symbian Developer Library

Mutex vs. Semaphore

The easiest way to understand the difference is to look at it as a real life situation::

Scenario 1:

There is a room with three (could be more) chairs for people to sit. Any number of people can attempt to enter the room. How do you ensure
that all the people who enter the room do so only if a seat is available.

Answer:- You assign a gatekeeper who guards the door ??

Scenario 2:

Lets us say there is another room with only one chair, so only one person can be in at any time. How do you ensure that.

Same answer:- assign a gatekeeper.

Mutexes and Semaphores are both gatekeepers. We now have to make a choice between which gatekeeper to use.

The gatekeeper in the first scenario has to be an intelligent one, as he has to do some math. He has to keep count of how many people are
currently in, how many are going out etc. So if ten people are waiting to get in (because the room is currently full), the gatekeeper has to
keep all of them waiting. When two of them leave, he notes that and allows two people to get in.

The gatekeeper in the second scenario can afford to be dumb, he just checks if the room is full or empty and lets one person in if it is
empty. No math, simple.

Semaphore is the intelligent gatekeeper as it keeps track of number of threads that are allowed to access the resopurce it protects.

Mutex is the dumb guy, he allows only one thread to access his resource.

If you did understand this concept correctly, the first question on your mind should be this.

Can’t the intelligent guy do the dumb guys job. Can’t you replace a Mutex with a Semaphore

Anil Pinto said,

September 5, 2007 @ 7:15 am

Thanks Buddy:)
Its really cool explanation.

With Regards,
Anil Pinto

Sujoy Kodali said,

September 13, 2007 @ 10:17 pm

Really great explanation

RSS feed for comments on this post · TrackBack URI