Sobes.tech
Junior — Middle

What are the differences between the Mutex mutual exclusion mechanism and active waiting Spinlock?

sobes.tech AI

Answer from AI

Mutex (mutual exclusion) is a synchronization mechanism that blocks a thread if the resource is busy and puts it into a waiting state, freeing the processor. Spinlock (active waiting) is a lock where the thread continuously checks the availability of the resource in a loop without yielding the processor.

Main differences:

  • Processor time usage: Mutex releases the CPU when the thread is waiting, Spinlock actively uses the CPU, which can lead to excessive load.
  • Performance: Spinlock is effective for very short critical sections where waiting is minimal; otherwise, it leads to resource wastage.
  • Application: Mutex is suitable for long-term locks and multitasking systems, Spinlock for low-level, high-performance tasks where context switching is costly.

Example of Spinlock usage in C++:

#include <atomic>

class Spinlock {
    std::atomic_flag flag = ATOMIC_FLAG_INIT;
public:
    void lock() {
        while (flag.test_and_set(std::memory_order_acquire)) {
            // active waiting
        }
    }
    void unlock() {
        flag.clear(std::memory_order_release);
    }
};