http://www.linuxquestions.org/questions/linux-kernel-70/in-depth-explanation-of-spinlock-semaphore-mutex-4175452627/