May 02, 2011

What is the Difference Between a Mutex and a Semaphore?

Full Question:
What is the difference between a mutex and a semaphore? Which one would you use to protect access to an increment operation?

  • Mutex is typically used to serialize access to a common resource while a semaphore is a number of concurrent accesses.
  • Mutex is like a semaphore with a count of one.
  • Mutex only allows a single thread to have access while semaphores can be concurrently signaled by any thread or process.
  • Semaphores are ideal for synchronization and often used for event notification and mutual exclusion while mutex is only applied for mutual exclusion.
  • Both mutexes and semaphores are used to control access to a shared resource – most often in multithreading scenarios. A mutex is used when only one thread or process is allowed to access a resource and a semaphore is used when only a certain set limit of threads or processes can access the shared resource. Essentially a mutex is a semaphore where the limit is set to 1.
  • Which one would I use to protect access to an increment operation? In the general scenario I would use a mutex. But, in some programming languages support incremental function or methods for this kind of situation, for example Interlocked.Increment in C#.