Wednesday, February 18, 2009

What did you understand by Spinlocks and How are they different from Semaphores ?

There are two main types of kernel locks. The fundamental type is the spinlock(include/asm/spinlock.h), which is a very simple single-holder lock: if you can't get the spinlock, you keep trying (spinning) until you can. Spinlocks are very small and fast, and can be used anywhere.

The second type is a semaphore (include/asm/semaphore.h): it can have more than one holder at any time (the number decided at initialization time), although it is most commonly used as a single-holder lock (a mutex). If you can't get a semaphore, your task will put itself on the queue, and be woken up when the semaphore is released. This means the CPU will do something else while you are waiting, but there are many cases when you simply can't sleep and so have to use a spinlock instead e.g. in interrupt service routines.

No comments: