In this tutorial we will discuss about various classical problem of synchronization.
Semaphore can be used in other synchronization problems besides Mutual Exclusion.
Below are some of the classical problem depicting flaws of process synchronaization in systems where cooperating processes are present.
We will discuss the following three problems:
Bounded Buffer (Producer-Consumer) Problem
Dining Philosophers Problem
The Readers Writers Problem
Because the buffer pool has a maximum size, this problem is often called the Bounded buffer problem.
This problem is generalised in terms of the Producer Consumer problem, where a finite buffer pool is used to exchange messages between producer and consumer processes.
Solution to this problem is, creating two counting semaphores "full" and "empty" to keep track of the current number of full and empty buffers respectively.
In this Producers mainly produces a product and consumers consume the product, but both can use of one of the containers each time.
The main complexity of this problem is that we must have to maintain the count for both empty and full containers that are available.
The dining philosopher's problem involves the allocation of limited resources to a group of processes in a deadlock-free and starvation-free manner.
There are five philosophers sitting around a table, in which there are five chopsticks/forks kept beside them and a bowl of rice in the centre, When a philosopher wants to eat, he uses two chopsticks - one from their left and one from their right. When a philosopher wants to think, he keeps down both chopsticks at their original place.
In this problem there are some processes(called readers) that only read the shared data, and never change it, and there are other processes(called writers) who may change the data in addition to reading, or instead of reading it.
There are various type of readers-writers problem, most centred on relative priorities of readers and writers.
The main complexity with this problem occurs from allowing more than one reader to access the data at the same time.