semaphores
Post on 06-Jan-2016
18 Views
Preview:
DESCRIPTION
TRANSCRIPT
Semaphores
The producer-consumer problem using semaphores
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 0Semaphore empty = N
producer1 consumer1 consumer2producer2Run queue
Mutex queue
Full queue
Empty queue
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 0Semaphore empty = 5
producer1 consumer1 producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&empty)
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5
producer1 consumer1 producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&mutex)
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5
producer1 consumer1 producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
insert_item(item)
X
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5
producer1 consumer1 producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
…
X
Quantum ends
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5
producer1
consumer1
producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&full)
X
Consumerdown(&full);down(&mutex);consume_item();up(&mutex);up(&empty);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 5
producer1
consumer1
producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
…
X
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4
producer1
consumer1
producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&empty)
X
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4
producer1
consumer1
producer2
consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&mutex)
X
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4
producer1
consumer1
producer2
consumer2Run queue
Mutex queue
Full queue
Empty queue
…
X
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4
producer1
consumer1
producer2
consumer2
Run queue
Mutex queue
Full queue
Empty queue
down (&full)
X
Consumerdown(&full);down(&mutex);consume_item();up(&mutex);up(&empty);
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 0Semaphore empty = 4
producer1
consumer1
producer2
consumer2
Run queue
Mutex queue
Full queue
Empty queue
…
X
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 0Semaphore empty = 4
producer1
consumer1
producer2
consumer2
Run queue
Mutex queue
Full queue
Empty queue
up (&mutex)
X
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2Run queue
Mutex queue
Full queue
Empty queue
up (&full)
X
Producerdown(&empty);down(&mutex);insert_item(item);up(&mutex);up(&full);
consumer2
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2Run queue
Mutex queue
Full queue
Empty queue
…
X
Quantum ends
consumer2
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2Run queue
Mutex queue
Full queue
Empty queue
down (&mutex)
Xconsumer2
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2Run queue
Mutex queue
Full queue
Empty queue
insert_item (item)
X
Xconsumer2
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2Run queue
Mutex queue
Full queue
Empty queue
up (&mutex)
X
Xconsumer2
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 2Semaphore empty = 4
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
up (&full)
X
X
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 2Semaphore empty = 4
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
…
X
X
Quantum ends
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&full)
X
X
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
down (&mutex)
X
X
Producer/ConsumerN = 6Semaphore mutex = 0Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
consume_item()
X
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 4
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
up(&mutex)
X
Producer/ConsumerN = 6Semaphore mutex = 1Semaphore full = 1Semaphore empty = 5
producer1 consumer1producer2 consumer2Run queue
Mutex queue
Full queue
Empty queue
up(&empty)
X
top related