Do you think IIT Guwahati certified course can help you in your career?
No
Introduction
Process Synchronisation is one of the most challenging concepts and one of the most vital ones. Semaphores, as well as Spinlocks, prove extremely useful in maintaining process synchronization in the Operating System. Both the spinlock and semaphore are used as locking mechanisms for process synchronization. Both of these works by granting and releasing locks for shared variables and help in the concurrent execution of processes.
A spinlock is a locking mechanism for process synchronization. It is useful when we are working with multiprocessor systems. It enables a thread to obtain a lock on shared variables by waiting in a cycle or spinning till the lock becomes accessible. Spinlock is only retained for a brief time. It has busy waiting as the process or thread continuously tries to acquire a lock on the desired shared variable.
Semaphores
A Semaphore is also a locking mechanism for process synchronization. This locking system includes a waiting queue for each resource present in the system and a counter that stores a non-negative number specifying the number of resources available to be allocated. Moreover, we have two atomic functions - wait() and signal() that are responsible for working this type of locking mechanism.
The wait function grants the resource if available; else adds the process to the waiting queue and calls the block()/sleep() function for the process. The signal function releases the resource and grants it to a process from the waiting queue by calling the wakeup() function.
Semaphores are of two types:
Binary Semaphores: The counter has either value of 0 or 1. 1 denotes that the resource is available, and 0 denotes that the resource is not available. It is used when we have single instance resources.
Counting Semaphores: The counter has a non-negative value specifying the number of instances available for a particular resource.
Difference between Spinlock and Semaphore
Spinlock
Semaphores
Spinlock is a low-level locking mechanism
A semaphore is a signaling mechanism.
It is a busy-wait process.
It is a sleep wait process.
Spinlocks can be used only for mutual exclusion.
Binary semaphores can be used for mutual exclusion and counting semaphores can be used for both mutual exclusion and counting of available resources.
More than one process may access the critical section depending upon the number of instances available.
Spinlocks are valid for only one process
Semaphores are used to synchronize among different processes.
Spinlocks can have only two values- LOCKED or UNLOCKED
Binary semaphores have two values- 0 or 1 but counting semaphores can have any non-negative value.
Threads continuously try to acquire the locks and do not sleep when they don’t get the resources.
Semaphores call the wait function that either allocates the resource or sends the process to sleep until an instance is available to be allocated.
In spinlock, a process waiting for a lock will instantly access a critical region as the process will poll continuously for the lock.
In semaphore, a process waiting for a lock might not get into the critical region as soon as the lock is free because the process would have gone to sleep, and when it is wakened up, it will enter into the critical section.
The above table sums up the difference between Priority Inversion and Priority Inheritance.
A spinlock is a locking mechanism for process synchronization. It enables a thread to obtain a lock on shared variables by waiting in a cycle or spinning till the lock becomes accessible. Spinlock is only retained for a brief time.
What is a semaphore?
A Semaphore is also a locking mechanism for process synchronization. It makes use of two functions wait and signal.
What does the wait function do in semaphore locking mechanisms?
The wait function grants the resource if available; else adds the process to the waiting queue and calls the block()/sleep() function for the process.
What does the signal function do in semaphore locking mechanisms?
The signal function releases the resource and grants it to a process from the waiting queue by calling the wakeup() function.
What are the two types of semaphores?
There are two types of semaphores - Binary semaphores and Counting semaphores. Binary semaphores can have either 0 or 1 denoting the availability and non-availability of resources. Counting semaphores have a non-negative value denoted by the available instances of resources.
Conclusion
In this article, We have discussed the differences between spinlock and semaphores.