7/25/2019 Monitor Examples
1/31
Monitor Solutions to Classical
Problems
7/25/2019 Monitor Examples
2/31
2
Announcements
CS 415 Projects graded.
Mean 80.! "ig# $0 out o% $0
CS 414 "ome&or' due Monda(.
7/25/2019 Monitor Examples
3/31
)
*oals %or +oda(
Continue &it# S(nc#roni,ation Abstractions
Monitors and condition -ariables
Producer Consumer &it# Monitors
eaders/riters roblem and solution &it# Monitors
7/25/2019 Monitor Examples
4/31
4
e-ie& Monitors
Monitors reresent t#e logic o% t#e rogram ait i% necessar( Signal en c#ange somet#ing so an( &aiting t#reads can
roceed
3asic structure o% monitor/based rogram
lockwhile (need to wait) { unlock
condvar.wait();
lock}
do something so no need to wait
condvar.signal();
unlock
Check and/or updatestate variablesWait if necessary
Check and/or updatestate variables
7/25/2019 Monitor Examples
5/31
5
e-ie& Producer/consumer &it#
a bounded bu%%er Problem e%inition
Producer uts t#ings into a s#ared bu%%er &ait i% %ull6 Consumer ta'es t#em out &ait i% emt(6 7se a %ied/si,e bu%%er bet&een t#em to a-oid loc'ste
9eed to s(nc#roni,e access to t#is bu%%er
Correctness Constraints
Consumer must &ait %or roducer to %ill bu%%ers! i% none %ull sc#eduling constraint Producer must &ait %or consumer to emt( bu%%ers! i% all %ull
sc#eduling constraint
:nl( one t#read can maniulate bu%%er ;ueue at a time mutual eclusion
emember ( &e need mutual eclusion 3ecause comuters are stuid
*eneral rule o% t#umb7se a searate sema#ore %or eac# constraint Semaphore not_empty; // consumers constraint
Semaphore not_!ull; // producers constraint Semaphore mute"; // mutual e"clusion
7/25/2019 Monitor Examples
6/31
Producer does #(not_!ull)$ %(not_empty)
Consumer does #(not_empty)$ %(not_!ull)
?s order o% P@s imortant> esB Can cause deadloc'
?s order o% @s imortant>
9o! ecet t#at it mig#t a%%ect sc#eduling e%%icienc(
#at i% &e #a-e 2 roducers or 2 consumers> o &e need to c#ange an(t#ing>
7/25/2019 Monitor Examples
8/31
8
e-ie& Moti-ation %or Monitors and
Condition ariables Sema#ores are a #uge ste u! but
+#e( are con%using because t#e( are dual urose 3ot# mutual eclusion and sc#eduling constraints
Damle t#e %act t#at %liing o% P@s in bounded bu%%er gi-es deadloc' isnot immediatel( ob-ious
Cleaner idea 7se locks%or mutual eclusion and condition variables%or sc#eduling constraints
e%inition Monitor a loc' and ,ero or more condition-ariables %or managing concurrent access to s#ared data 7se o% Monitors is a rogramming aradigm
Some languages li'e Ea-a ro-ide monitors in t#e language +#e loc' ro-ides mutual eclusion to s#ared data
Al&a(s ac;uire be%ore accessing s#ared data structure
Al&a(s release a%ter %inis#ing &it# s#ared data
Foc' initiall( %ree
7/25/2019 Monitor Examples
9/31
$
Condition ariables "o& do &e c#ange t#e get6 routine to &ait until somet#ing is
in bu%%er> Could do t#is b( 'eeing a count o% t#e number o% t#ings on t#e;ueue &it# sema#ores6! but error rone
Condition ariable a ;ueue o% t#reads &aiting %or somet#inginsidea critical section
Ge( idea allo& sleeing inside critical section b( atomicall( releasingloc' at time &e go to slee
Contrast to sema#ores Can@t &ait inside critical section
:erations &ait('lock) Atomicall( release loc' and go to slee. e/ac;uire
loc' later! be%ore returning. Signal() a'e u one &aiter! i% an( roadcast() a'e u all &aiters
ule Must #old loc' en doing condition -ariable osB
7/25/2019 Monitor Examples
10/31
10
Producer Consumer using Monitors
-onitorProducer_Consumer& any_t buf[N; int n = 0! tail = 0! hea" = 0; con"ition not_empty! not_full;
#oi" put$char ch% &.hile$n == N%
.ait$not_full%;buf[hea"(N = ch;hea"));n));
si,nal$not_empty%; +
char ,et$% &.hile$n == 0% .ait$not_empty%;ch = buf[tail(N;tail));n;si,nal$not_full%;return ch;
+
7/25/2019 Monitor Examples
11/31
11
eminders Subtle asects
9otice t#at en a t#read calls &ait6! i% it bloc's it also
automaticall( releases t#e monitor@s mutual eclusion
loc'
+#is is an elegant solution to an issue seen &it#
sema#ores
Caller #as mutual eclusion and &ants to call PnotHemt(6I
but t#is call mig#t bloc'
?% &e just do t#e call! t#e solution deadloc'sI
3ut i% &e first call mute6! &e get a race conditionB
7/25/2019 Monitor Examples
12/31
12
e-ie& Mesa -s. "oare monitors
9eed to be care%ul about recise de%inition o% signal and &ait.
Consider a iece o% our de;ueue codewhile (n*) {
wait(not_empty); // +! nothing$ sleep}ch ,u!-tail0; // 1et ne"t item
#( didn@t &e do t#is>
i! (n*) {wait(not_empty); // +! nothing$ sleep
}ch ,u!-tail0;// 1et ne"t item
Ans&er deends on t#e t(e o% sc#eduling
"oare/st(le most tetboo's6 Signaler gi-es loc'! CP7 to &aiter= &aiter runs immediatel( aiter gi-es u loc'! rocessor bac' to signaler en it eits critical
section or i% it &aits again
Mesa/st(le Ea-a! most real oerating s(stems6 Signaler 'ees loc' and rocessor
aiter laced on read( ;ueue &it# no secial riorit( Practicall(! need to c#ec' condition again a%ter &ait
7/25/2019 Monitor Examples
13/31
1)
e-ie& Can &e construct Monitors
%rom Sema#ores> Foc'ing asect is eas( Eust use a mute Can &e imlement condition -ariables t#is &a(>
&ait() { #("_sem); }
Signal() { %("_sem); }
oesn@t &or' ait6 ma( slee &it# loc' #eld
oes t#is &or' better>&ait() { %(mute"); // 2elease mute" lock #("_sem);
#(mute"); // 3c4uire mute" lock}Signal() { %("_sem); }
9o Condition -ars #a-e no #istor(! sema#ores #a-e #istor( #at i% t#read signals and no one is &aiting> 9:/:P #at i% t#read later &aits> +#read aits #at i% t#read @s and noone is &aiting> ?ncrement #at i% t#read later does P> ecrement and continue
7/25/2019 Monitor Examples
14/31
14
Construction o% Monitors %rom
Sema#ores con@t6 Problem &it# re-ious tr( P and are commutati-e result is t#e same no matter at order
t#e( occur Condition -ariables are 9:+ commutati-e
oes t#is %i t#e roblem>&ait(5ock lock) { %(mute"); // 2elease mute" lock #("_sem);
#(mute"); // 3c4uire mute" lock}Signal() { i! semaphore 4ueue is not empty %("_sem);
} 9ot legal to loo' at contents o% sema#ore ;ueue +#ere is a race condition signaler can sli in a%ter loc' release and
be%ore &aiter eecutes sema#ore.P6
?t is actuall( ossible to do t#is correctl( Comle solution %or "oare sc#eduling in boo'
Can (ou come u &it# simler Mesa/sc#eduled solution>
7/25/2019 Monitor Examples
15/31
15
Construction o% HoareMonitors
using Sema#ores
or each proce"ure :
'$mutex%;
/* bo"y of */
if$next_count 0%$next%;
else
$mutex%;
Wait(){
x_count++;
if(next_count > 0)
V(next);
else
V(mutex); P(x_sem);
x_count--;
Signal(){
If(x_count > 0) { next_count++;
V(x_sem);
P(next);
next_count--;
}
7/25/2019 Monitor Examples
16/31
1 :r suose t#at a &riter is &aiting and an endless o% stream o%
readers 'ees s#o&ing u. ?s it %air %or t#em to become acti-e>
e@ll %a-or a 'ind o% bac'/and/%ort# %orm o% %airness :nce a reader is &aiting! readers &ill get in net. ?% a &riter is &aiting! one &riter &ill get in net.
7/25/2019 Monitor Examples
19/31
1$
eaders and riters
-onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;
oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%
& ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;
+ oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else
Si,nal$4an2rite%; +
oid 3eginead6
N
i%9riters 1 OO aitingriters 06
N QQaitingeaders=
aitCanead6=
//aitingeaders=
R
QQ9eaders=
SignalCanead6=
R
oid Dndead6
N
i%//9eaders 06
SignalCanrite6=
R
7/25/2019 Monitor Examples
20/31
20
eaders and riters
-onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;
oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%
& ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;
+ oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else
Si,nal$4an2rite%; +
oid 3eginead6
N
i%9riters 1 OO aitingriters 06
N QQaitingeaders=
aitCanead6=
//aitingeaders=
R
QQ9eaders=
SignalCanead6=
R
oid Dndead6
N
i%//9eaders 06
SignalCanrite6=
R
7/25/2019 Monitor Examples
21/31
21
eaders and riters
-onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;
oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%
& ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;
+ oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else
Si,nal$4an2rite%; +
oid 3eginead6
N
i%9riters 1 OO aitingriters 06
N QQaitingeaders=
aitCanead6=
//aitingeaders=
R
QQ9eaders=
SignalCanead6=
R
oid Dndead6
N
i%//9eaders 06
SignalCanrite6=
R
7/25/2019 Monitor Examples
22/31
22
eaders and riters
-onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;
oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%
& ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1;
+ oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else
Si,nal$4an2rite%; +
oid 3eginead6
N
i%9riters 1 OO aitingriters 06
N QQaitingeaders=
aitCanead6=
//aitingeaders=
R
QQ9eaders=
SignalCanead6=
R
oid Dndead6
N
i%//9eaders 06
SignalCanrite6=
R
7/25/2019 Monitor Examples
23/31
2)
7nderstanding t#e Solution
A &riter can enter i% t#ere are no ot#er acti-e &riters and
no readers are &aiting
7/25/2019 Monitor Examples
24/31
24
eaders and riters
-onitorReadersNWriters& int 2aitin,2riters! 2aitin,3ea"ers!N3ea"ers! N2riters; 4on"ition 4an3ea"! 4an2rite;
oi" 5e,in2rite$% & if$N2riters == 1 66 N3ea"ers 0%
& ))2aitin,2riters; .ait$4an2rite%; 2aitin,2riters; + N2riters = 1; + oi" 7n"2rite$% & N2riters = 0; if$2aitin,3ea"ers% Si,nal$4an3ea"%; else
Si,nal$4an2rite%; +
oid 3eginead6
N
i%9riters 1 OO aitingriters 06
N QQaitingeaders=
aitCanead6=
//aitingeaders=
R
QQ9eaders=
SignalCanead6=
R
oid Dndead6
N
i%//9eaders 06
SignalCanrite6=
R
7/25/2019 Monitor Examples
25/31
25
7nderstanding t#e Solution
A reader can enter i%
+#ere are no &riters acti-e or &aiting
So &e can #a-e man( readers acti-e all at once
:t#er&ise! a reader &aits ma(be man( do6
7/25/2019 Monitor Examples
26/31
2