Professional Documents
Culture Documents
Semaphore
Prepared By :
14pgit005 (Neha Jobanputra)
14pgit010 (Krupa Patel)
14pgit020 (Arpita Sanghani)
Producer-consumer problem
Chefs cook
conveye belt
items
r
an put them on a
d
Producer-consumer problem
...and many
waiters!
Producer-consumer problem
A potentia mess
l
Producer-consumer problem
Waiter (Consumer)
Chef (Producer)
insert item
s
remove item
Shared resource:
bounded buffer
Shared buffer
Chef (Producer)
Waiter (Consumer)
insertPtr
removePtr
What does
the
waiter take a
pizza from?
chef do
with a new
pizza?
Shared buffer
Chef (Producer)
Waiter (Consumer)
insertPtr
insertPtr
removePtr
Insert
pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
insertPtr
removePtr
Insert
pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
insertPtr
removePtr
Insert pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
insertPtr
removePtr
Remove pizza
removePtr
Shared buffer
Chef (Producer)
Waiter (Consumer)
insertPtr
Insert pizza
removePtr
Shared buffer
Chef (Producer)
Insert pizza
Waiter (Consumer)
insertPtr
removePtr
Shared buffer
Waiter (Consumer)
Chef (Producer)
BUFFER FULL:
Producer must wait!
Insert pizza
insertPtr
removePt
r
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Waiter (Consumer)
removePtr
insertPtr
Remove pizza
Shared buffer
Chef (Producer)
Buffer
Consumer mus be
empty:
blocked!
t
Waiter (Consumer)
removePtr
insertPtr
Remove
pizza
Designing a solution
Waiter (Consumer)
Chef (Producer)
Wait for
slot
empty
Signal item
item do we need?
What Insert
Synchronization
arrival
Answer
is we required three semaphore.
1) Mutex :- to control use of buffer
2) To block the producers if buffer is full
3) To block the consumer if buffer is empty
Remove
item
Signal empty slot
available
Designing a solution
Chef (Producer)
Wait for
Waiter (Consumer)
slot
Mute
x
empty
Signal item
(shared
buffer)
Insert item
arrival
arrival
Remove
item
Signal empty slot
available
What synchronizatio do we
n
need?
Designing a solution
Chef (Producer)
Wait for
Waiter (Consumer)
slot
Semapho
re
empty
Signal item
(# empty
slots)
Insert item
arrival
arrival
Remove
item
Signal empty slot
available
What synchronizatio do we
n
need?
Designing a solution
Chef (Producer)
Wait for
Waiter (Consumer)
slot
Semaphor
e
empty
Signal item
(# filled
slots)
Insert item
arrival
arrival
Remove
item
Signal empty slot
available
What synchronizatio do we
n
need?
Producer-Consumer Code
Critical Section:
Critical Section:
move
move
insert
buffer[ pointer
insertPtr
] =
data;
insertPtr
+ 1) % N;
remove
result = pointer
buffer[removePtr];
= (insertPtr
removePtr = (removePtr
+1) % N;
Producer-Consumer Code
Counting semaphore
check and decrement the
number of free slots
Counting semaphore
check and decrement the
number of available items
sem_wait(&slots);
sem_wait(&items);
Block if
mutex_lock(&mutex);
there
are no
=
buffer[
insertPtr
]
free
insertPtr
= (insertPtr +
slots
data;
mutex_lock(&mutex)
result =
buffer[removePtr];
removePtr = (removePtr
1) % N;
+1) % N;
mutex_unlock(&mutex);
mutex_unlock(&mutex);
sem_post(&items);
sem_post(&slots);
Block if
there
are no
items to
take