Professional Documents
Culture Documents
4 Bounded - Buffer - Producer - Consumer
4 Bounded - Buffer - Producer - Consumer
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;
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
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