![Mastering C++ Multithreading](https://wfqqreader-1252317822.image.myqcloud.com/cover/899/36700899/b_36700899.jpg)
Hardware
The simplest hardware-based implementation on a uniprocessor (single processor core), non-SMT system is to disable interrupts, and thus, prevent the task from being changed. More commonly, a so-called busy-wait principle is employed. This is the basic principle behind a mutex--due to how the processor fetches data, only one task can obtain and read/write an atomic value in the shared memory, meaning, a variable sized the same (or smaller) as the CPU's registers. This is further detailed in Chapter 8, Atomic Operations - Working with the Hardware.
When our code tries to lock a mutex, what this does is read the value of such an atomic section of memory, and try to set it to its locked value. Since this is a single operation, only one task can change the value at any given time. Other tasks will have to wait until they can gain access in this busy-wait cycle, as shown in this diagram:
![](https://epubservercos.yuewen.com/6F573C/19470405908947306/epubprivate/OEBPS/Images/df8b8297-74e1-477f-877c-4823af8f143e.png?sign=1738935212-tlEib5qcKid2z0E0C6T0Yj2d854KjsHd-0-446bd7aaf6345c4055f221bdb9372f81)