Review: Producer and Consumer
!"
! "
#
$
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
int counter = 0;
#
%
&'
()
*#
)(
%
++ ,-../!0
1/&'
2 ((
3 4+
*#
5
+ % 6 7& 8 ,-../!0 1/5
##$
2
$
%
& '
%
2 ((
*$
+%
%%$
()
2
++ 9&'
+
3
45
6 7& 8 ,-../!0 1/5
*$
:
#
;
##$
%%$
:
&
<
,
#
>
=,
66?
7+
7+
+
#
>
767
7
==?
@+
@+
+
@
7
@
A
B
!!
!
C
B
<
B
B
$
>
*
+ D?
9
7
*
*
G
D
7+
7+
@
F
"
*
*
*
*
'
767'
@+
'
@+
@=7'
+
+
7 '
@ '
7 + D2
7 + E2
@ + D2
@ + G2
+E2
+ G2
!
$
!
<
H
B
$
' (
=
<
=
<
B
<
"
<
/*
;
<
;
%#
A
&
B
<
:
%,
;
:
;
I
=
*
$#-<
&
=
=
B
(
"
;
B
=
=
%
"
&
B
# %
#
)
=
( "
<
#9
#7<
#&
( (
!
:
7
J
5
+ 5
-
#9
" * "
#9
9<
((
((#
#
+9
9B
7
(
!
(
B
#7
B
( ++
B
7B
#7
:
@
J
3@45
394 +
34+
374 +
5 ((#
#9
#9
#7
<
"
;
#9
B #9
* "
(
#9 K #7
!
(
;
<
( ++
B
394 K
L
394
394
B #9
<
374
B
#
:
;
"
5
,
;
3@45
"
<
;
<
34+
#
M
:
#
#
while (true) {
flag[i] = TRUE;
turn = j;
while ( flag[j] && turn == j);
CRITICAL SECTION
flag[i] = FALSE;
REMAINDER SECTION
}
" * "
#9
!
#7
(
( ++
B #9
,
394
,
:
$
B
<
N
<
B
7B @B @B @B FB FB GB DL
'
'
"
<
3 45
3 45
9<
% B &O% B &
O
+
O
,
:
P
#
%
%
!
;
!
=:
:
B
#
%
P
;
,
=:
=
&
=
&
&
Q
:
A "
/*
!
"
#
"
/*
C
B
"
C
,
=
"
A
B
"
%7RE9&
"
A
S
T
B
!
"
;
%&
S
#%&
"
$
&
. /0
& "
$
%%$
J%&
"
12 3
%
4
O9
! ". /0
##$
4
%&
B
%
&
I
=
I
+9
DE #
DU
#
#
5
>7?
% &
7U I
7V #
7
@
@B
6
% &
>@?
I
.
,
$
A "
A " W
A " W
!
"
I
A " W
$
,
!
#
=,
#
I
=#
#
#
,
,
#
$
=
#
=
B
! "
#
$
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
int counter = 0;
#
%
&'
()
*#
)(
%
++ ,-../!0
1/&'
2 ((
3 4+
*#
5
+ % 6 7& 8 ,-../!0 1/5
##$
2
$
%
& '
%
2 ((
*$
+%
%%$
()
2
++ 9&'
+
3
45
6 7& 8 ,-../!0 1/5
*$
:
#
;
##$
%%$
:
&
<
,
#
>
=,
66?
7+
7+
+
#
>
767
7
==?
@+
@+
+
@
7
@
A
B
!!
!
C
B
<
B
B
$
>
*
+ D?
9
7
*
*
G
D
7+
7+
@
F
"
*
*
*
*
'
767'
@+
'
@+
@=7'
+
+
7 '
@ '
7 + D2
7 + E2
@ + D2
@ + G2
+E2
+ G2
!
$
!
<
H
B
$
' (
=
<
=
<
B
<
"
<
/*
;
<
;
%#
A
&
B
<
:
%,
;
:
;
I
=
*
$#-<
&
=
=
B
(
"
;
B
=
=
%
"
&
B
# %
#
)
=
( "
<
#9
#7<
#&
( (
!
:
7
J
5
+ 5
-
#9
" * "
#9
9<
((
((#
#
+9
9B
7
(
!
(
B
#7
B
( ++
B
7B
#7
:
@
J
3@45
394 +
34+
374 +
5 ((#
#9
#9
#7
<
"
;
#9
B #9
* "
(
#9 K #7
!
(
;
<
( ++
B
394 K
L
394
394
B #9
<
374
B
#
:
;
"
5
,
;
3@45
"
<
;
<
34+
#
M
:
#
#
while (true) {
flag[i] = TRUE;
turn = j;
while ( flag[j] && turn == j);
CRITICAL SECTION
flag[i] = FALSE;
REMAINDER SECTION
}
" * "
#9
!
#7
(
( ++
B #9
,
394
,
:
$
B
<
N
<
B
7B @B @B @B FB FB GB DL
'
'
"
<
3 45
3 45
9<
% B &O% B &
O
+
O
,
:
P
#
%
%
!
;
!
=:
:
B
#
%
P
;
,
=:
=
&
=
&
&
Q
:
A "
/*
!
"
#
"
/*
C
B
"
C
,
=
"
A
B
"
%7RE9&
"
A
S
T
B
!
"
;
%&
S
#%&
"
$
&
. /0
& "
$
%%$
J%&
"
12 3
%
4
O9
! ". /0
##$
4
%&
B
%
&
I
=
I
+9
DE #
DU
#
#
5
>7?
% &
7U I
7V #
7
@
@B
6
% &
>@?
I
.
,
$
A "
A " W
A " W
!
"
I
A " W
$
,
!
#
=,
#
I
=#
#
#
,
,
#
$
=
#
=
B