Mutex, Semaphore and Spinlock
Mutex provides one person to access a single resource at a time,
others must wait in a queue. Once this person is done, the guy next in the
queue acquire the resource.So access is serial, one guy after other. Too
aggressive.Semaphore are useful if multiple instances (N) of a resource is to
be shared among a set of users. As soon as all N resources are acquired, any
new requester has to wait. Since there is no single lock to hold, there is as
such no ownership of a semaphore.
Spinlock is an aggressive mutex. In mutex,
if you find that resource is locked by someone else, you (the thread/process)
switch the context and start to wait (non-blocking).
Whereas spinlocks do not switch context and keep spinning. As soon as resource
is free, they go and grab it. In this process of spinning, they consume many
CPU cycles. Also, on a uni-processor machine they are useless and perform very
badly (do I need to explain that?).Whereas spinlocks do not switch context and
keep spinning. As soon as resource is free, they go and grab it. In this
process of spinning, they consume many CPU cycles. Also, on a uni-processor
machine they are useless and perform very badly (do I need to explain that?).
Spinlock is an aggressive mutex. In mutex, if you find that resource is locked by someone else, you (the thread/process) switch the context and start to wait (non-blocking).
Whereas spinlocks do not switch context and keep spinning. As soon as resource is free, they go and grab it. In this process of spinning, they consume many CPU cycles. Also, on a uni-processor machine they are useless and perform very badly (do I need to explain that?).Whereas spinlocks do not switch context and keep spinning. As soon as resource is free, they go and grab it. In this process of spinning, they consume many CPU cycles. Also, on a uni-processor machine they are useless and perform very badly (do I need to explain that?).