Buzz locks, better known as spin locks, are a primitive way of protecting a data
structure or piece of code. They only allow one process at a time to be within a critical
region of code. They are used in Linux to restrict access to fields in data structures,
using a single integer field as a lock.
Each process wishing to enter the region attempts to change the lock's initial value from
0 to 1. If its current value is 1, the process tries again, spinning in a tight loop of
code. The access to the memory location holding the lock must be atomic, the action of
reading its value, checking that it is 0 and then changing it to 1 cannot be interrupted
by any other process. Most CPU architectures provide support for this via special
instructions but you can also implement buzz locks using uncached main memory.
When the owning process leaves the critical region of code it decrements the buzz lock,
returning its value to 0. Any processes spinning on the lock will now read it as 0,
the first one to do this will increment it to 1 and enter the critical region.