Mutex Vs Semaphore in OS

What is the difference between Mutex and Semaphore in Operating System

Mutex is essentially a locking and releasing mechanism and however, Semaphore is a signalling mechanism. Both are used for Critical section and mutual exclusion problems.

Most people think that Binary Semaphore and Mutex are essentially the same but they are not.

We first recommend reading the post about Semaphores and mutex here before proceeding further.

Differences

Mutex

Example – Imagine mutex as a key to a single toilet. Only one person can be inside the toilet at a time and he would want to lock the toilet and others waiting for toilet access must wait for person already inside to release the toilet. When finished the person gives the key to next person in the queue.

  • Mutex is for thread.
  • Mutex is essentially atomic and singular in nature.
  • Mutex is binary in nature.
  • Operations like Lock and Release are possible
  • Mutex works in userspace
  • Only one thread can acquire a mutex at a time
  • Mutex is an object

Semaphore

Example – Imagine a bathroom with 4 identical toilets here, identical keys can open the bathrooms. Here as many as 4 people can use the bathroom simultaneously and they wait and signal one another about the occupancy of the bathrooms

  • Semaphore is for processes
  • Semaphores are also atomic but not singular in nature
  • Semaphores are of two types that are binary and counting
  • Semaphores work in kernel space
  • Only one process can acquire binary semaphore at a time but multiple processes can simultaneously acquire semaphore in case of counting semaphore
  • Semaphore is an integer variable
 
Types Mutex vs Semaphores

What is SpinLock ?

While a process is in critical section, any other process which waits to enter critical section must loop continuously in call to acquire. This is a spinlock as the process “Spins” while waiting for the lock to be available.

Advantages –

  • No Context switch is required for a process waiting on a lock.
  • Good for systems where it’s known that locks are of short duration.
  • Employed in Multiprocess system,  where one thread can spin on 1 processor while another thread processes its critical section in another processor.

Semaphores –

  • It’s  a Generalized Mutex.
  • Semaphores are integer variable , which is accessed through 2 atomic operations, wait() and signal ().
  • It’s a signalling Mechanism.

Mutex in Operating System

Mutex lock in OS is essentially a variable that is binary nature that provides code wise functionality for mutual exclusion. At times, there maybe multiple threads that may be trying to access same resource like memory or I/O etc. To make sure that there is no overriding. Mutex provides a locking mechanism.

Only one thread at a time can take the ownership of a mutex and apply the lock. Once it done utilising the resource and it may release the mutex lock.

Mutex Highlights

Mutex is very different from Semaphores, please read Semaphores or below and then read the difference between mutex and semaphores here.

  1. Mutex is Binary in nature
  2. Operations like Lock and Release are possible
  3. Mutex is for Threads, while Semaphores are for processes.
  4. Mutex works in user-space and Semaphore for kernel
  5. Mutex provides locking mechanism
  6. A thread may acquire more than one mutex
  7. Binary Semaphore and mutex are different

Semaphores in OS

While mutex is a lock (wait) and release mechanism. Semaphores are signalling mechanisms that signal to processes the state of the Critical section in OS and grant access to the critical section accordingly.

Semaphores use the following methods to control access to critical section code –

  1. Wait
  2. Signal

Semaphore Types

We have two types of semaphores –

  1. Binary Semaphore
    1. Only True/False or 0/1 values
  2. Counting Semaphore
    1. Non-negative value

Semaphore Implementation

Wait and Signal are two methods that are associated with semaphores. While some articles are represented as wait(s) or signal(s) however in some blogs are represented as p(s) for wait and v(s) for signal

Wait p(s) or wait(s)

  1. Wait decrements the value of semaphore by 1

Signal v(s) or signal(s)

  1. Signal increments the value of semaphore by 1

Semaphore

  1. Semaphore can only have positive values
  2. Before the start of the program, it is always initialised to
    1. n in Counting semaphore (Where n is the number of processes allowed to enter critical section simultaneously)
    2. 1 in the case of a binary semaphore
Semaphore – 1
Semaphore

Signal Operations

  • Increments semaphore by 1
  • Signals that the process has completed its critical section execution
signal(S)
{
    S++;
}

Wait Operations

  • Wait operation decrements the value of semaphore S if S is a positive number
  • Else if S is 0 or negative then code gets stuck at while loop as it keeps implementing infinitively
  • The semi-colon after while forces while loop definitively if S is 0 or negative
  • Thus the code doesn’t move ahead in hopes that the value of S will increase because of some other signal operation elsewhere

Code Logic for Incrementing – Decrementing value of Semaphore –

wait(S)
{
    while (S<=0);

   S--;
}

Actual Working for both functions together to achieve access of critical section –

    // some code

    wait(s);


    // critical section code


    signal(s);


    // remainder code

The eventual goal is to protect the critical section code using wait and signal operations.

You can visualize the whole operation on how the Semaphore system works with the example below

Mutex Semaphore Binary

For Counting Semaphore

For Counting Semaphore we initialise the value of semaphore as the number of concurrent access of critical sections we want to allow.

The eventual goal is to protect the critical section code using wait and signal operations.

You can visualize the whole operation on how the Semaphore system works with the example below

Operating System Process Synchornization

      Read More

    1. Process Synchronization
    2. Critical Section
    3. Inter-Process Communication
    4. UEFI(Unified Extensible Firmware Interface) and how is it different from BIOS
    5. Mutex
    6. Semaphore
    7. Mutex vs. Semaphore
    8. Atomic Operations in OS
    9. Peterson’s Algorithm for Mutual Exclusion (Only important for Cisco and Arista Networs)
      1. Java
      2. C
      3. Python
    10. Peterson’s Algorithm for Critical Section Problem (Only important for Cisco and Arista Networs)
    11. Readers-Writers Problem