Which to use? Use semaphores when: The critical section is long Sleeping is a possibility Delays can be tolerated Use spinlocks when: The critical section is short Code is running in atomic context Interrupt handlers Atomic kmaps held Preemption is disabled Tasklets Latency must be minimized