concurrencylockingmutexsemaphore

What is the difference between lock, mutex and semaphore?


I've heard these words related to concurrent programming, but what's the difference between lock, mutex and semaphore?


Solution

  • A lock allows only one thread to enter the part that's locked and the lock is not shared with any other processes, a lock must be released by that same thread that acquired it. Some locks can be acquired multiple times by the same thread without causing a deadlock, but must be released the same amount of times.

    A mutex is the same as a lock but it can be system wide (shared by multiple processes).

    A semaphore does the same as a mutex but allows x number of threads to enter, this can be used for example to limit the number of cpu, io or ram intensive tasks running at the same time.

    For a more detailed post about the differences between mutex and semaphore read here.

    A semaphore can be acquired by one thread and released by a different thread, this is not possible with a normal lock.

    You also have read/write locks that allows either unlimited number of readers or 1 writer at any given time.

    The descriptions are from a .NET perspective and might not be 100% accurate for all OS/Languages.