Semaphores The producer-consumer problem using semaphores.

26
Semaphores The producer-consumer problem using semaphores
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    287
  • download

    5

Transcript of Semaphores The producer-consumer problem using semaphores.

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