[go: up one dir, main page]

0% found this document useful (0 votes)
16 views18 pages

4 Bounded - Buffer - Producer - Consumer

The document describes a bounded buffer for producer-consumer synchronization between a producer that generates items and a consumer that processes items. The buffer is an array of fixed size that holds items. The producer adds items when there is available space and the consumer removes items when items are available. Index variables track the write and read positions in the circular buffer to ensure only one process accesses the buffer at a time to prevent overwriting data.

Uploaded by

Amisha Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views18 pages

4 Bounded - Buffer - Producer - Consumer

The document describes a bounded buffer for producer-consumer synchronization between a producer that generates items and a consumer that processes items. The buffer is an array of fixed size that holds items. The producer adds items when there is available space and the consumer removes items when items are available. Index variables track the write and read positions in the circular buffer to ensure only one process accesses the buffer at a time to prevent overwriting data.

Uploaded by

Amisha Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 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