Jeremiah Peschka walks us through the concepts behind spinlocks:
Here’s our fist stab at a spinlock, badly written in C:
// lock_value is an integer that's shared between multiple threads while (lock_value != 0) { // spin } lock_value = 1; do_something(); lock_value = 0;The general idea here is correct – we have some
lock_value
and we only want to allow processes into the critical section of code if the another process doesn’t “hold the lock.” Holding the lock means thatlock_value
is set to a non-zero value.There are few things that make this code bad. These things, coincidentally, are part of what make concurrent programming difficult.
Spinlocks are a critical part of maintaining internal consistency, but they can also accidentally ruin performance on your system if done wrong. Read the whole thing.