Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 18

Bounded-Buffer Producer

Consumer

1
Bounded-Buffer Producer Consumer
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;

item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;

1
Bounded-Buffer Producer Consumer
item next_produced;

while (true) {
/* produce an item in next produced */
while (((in + 1) % BUFFER_SIZE) == out)
; /* do nothing */
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
}

1
Bounded-Buffer Producer Consumer
item next_consumed;

while (true) {
while (in == out)
; /* do nothing */
next_consumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;

/* consume the item in next consumed */


}

1
Bounded-Buffer Producer Consumer
0 1 2 3 4

out in
in=out=0------> Buffer is empty

5
Bounded-Buffer Producer Consumer
0 1 2 3 4

out in in=(in+1)%BUFFER_SIZE (produce)

6
Bounded-Buffer Producer Consumer
0 1 2 3 4
A B

out in in=(in+1)%BUFFER_SIZE
(produce)

7
Bounded-Buffer Producer Consumer
0 1 2 3 4
B

out in
out= (out+1)%BUFFER_SIZE (consume)

8
Bounded-Buffer Producer Consumer
0 1 2 3 4
B C

out in in=(in+1)%BUFFER_SIZE
(produce)

9
Bounded-Buffer Producer Consumer
0 1 2 3 4
B C D

out (produce) in

10
Bounded-Buffer Producer Consumer
0 1 2 3 4
B C D E

in out (produce)

11
Bounded-Buffer Producer Consumer
0 1 2 3 4
X B C D E

(produce) in out
(in+1)%BUFFER_SIZE==out
buffer is FULL!

12
Bounded-Buffer Producer Consumer
0 1 2 3 4
X C D E

in out
( consume )

13
Bounded-Buffer Producer Consumer
0 1 2 3 4
X D E

in out
(consume)

14
Bounded-Buffer Producer Consumer
0 1 2 3 4
X E

in out
(consume)

15
Bounded-Buffer Producer Consumer
0 1 2 3 4
X

out in
(consume)

16
Bounded-Buffer Producer Consumer
0 1 2 3 4

out in
(consume)

17
Bounded-Buffer Producer Consumer
0 1 2 3 4

in out
buffer is EMPTY!!

18

You might also like