http://linuxburps.blogspot.in/2013/09/linux-kernel-synchronization-primitives.html?m=1