AaT   0@@P0  `Pp0P0Pp HH $ @d HHHHff@  d Footnote TableFootnote**.\t.\t/ - :;,.!?#+cZ/cZTOCHeading1Heading2   FEquationVariables@=?`???@@====== <$lastpagenum><$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear>J<$hour>:<$minute00> <$ampm> on <$dayname>, <$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear><$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear> <$fullfilename> <$filename> <$paratext[Title]> <$paratext[Heading1]> <$curpagenum> <$marker1> <$marker2> (Continued)+ (Sheet <$tblsheetnum> of <$tblsheetcount>)Heading & Page <$paratext> on page<$pagenum>Pagepage<$pagenum>See Heading & Page%See <$paratext> on page<$pagenum>. Table All7Table<$paranumonly>, <$paratext>, on page<$pagenum>Table Number & Page'Table<$paranumonly> on page<$pagenum>Heading <$paratext>?HTML Headings++A88::33557BAHHA====>>>>> > > >>>>>>>>>>!>#>%>'>)>+>->/>1>3>5>7>9>;>=>?>A>B>C>E>G>I>K>M>O>Q>S>U>W>X>Y>[>]>_>a>c>e>g>i>k>m>o>q>s>u>w>y>{>}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????? ? ? ??????????!?#?%?'?)?+?-?/?1?3?5?7?9?;?=???A?C?E?G?I?K?M?O?Q?S?U?W?Y?[?]?_?b?d?f?h?j?l?n?p?r?t?v?x?z?|?~???????????????????????????????????????????????????@@!@#@%@'@)@+@-@/@1@3@5@7@9@;@=@?@A@B==???;#???;/;2;50=??????@@@@@ @ @@@@@D+@H-@I@K-@L/@M/@N/@O/@P/@Q/@R/@S/@T/@U/@V/@W/@X/@Y/@Z/@[/@\/@]/@^/@_/@`/@a/@b/@c/@d/ @f-@g0@h0@i0@j0@k0@l0@m0@n0@o0@p0dq5+d@sBB d=d=; HmR=HmRHRHRFootnote Hr@=Hr@HzHz Single LineH靕= Footnote =  HD= HDHH Double LineH=  Double Line= = H֝=  Single Line= d5p77HZ֝=; TableFootnoted=d?靕l d=d1QRUX[^adgjmpsvy| %).1W,܁܁Bm }蝝d =蝝d WaHTML Mapping Table }H蝝d =H蝝d Wa }H蝝d =H蝝d Wa }H蝝d =H蝝d Wa }H蝝d >H蝝d Wa }H>H! FrameMaker PA Source Item }H >H Wa HTML Item }H >H Wa }H>H W aInclude Auto# } H>  H W a Comments }H> H W a }HH> HH W aElement }H>#H W a New Topic? }H>H Wa } H> H Wa }H > $H Wa P:Date Line }HH >#%HH WaP }H >$&H WaN }H >%'H WaN } H >&( H Wa }EH > ')EH Wa P:Reading }HEH >"(*HEH WaP }EH >$)+EH WaN }EH >&*,EH WaN } EH >(+- EH Wa }QH >*,.QH WaP:Title }HQH >,-/HQH WaH* }QH >..0QH WaN }QH >0/1QH WaN } QH >202 QH Wa }]H >413]H WaP:Body }H]H >624H]H W aP }]H >835]H W!aN }]H >:46]H W"aN } ]H ><57 ]H W#a }iH(>>68iH( W$a P:Numbered1 }HiH(>@79HiH((%aLI &a Parent = OL Q'a Depth = 0 }iH(>D8:iH( W(aN }iH(>F9;iH( W)aY } iH(>H:< iH( W*a }띝H >J;=띝H  W+a P:Heading1 }H띝H >L<>H띝H  W,aH* }띝H >N=?띝H  W-aN }띝H >P>@띝H  W.aN } 띝H >R?A 띝H  W/a }H(>T@BH(  W0a P:Numbered }HH(>VACHH(( 1aP 2a Parent = OL Q3a Depth = 0 }H(>ZBDH(  W4aN }H(>\CEH(  W5aY } H(>^DF H(  W6a }H >`EGH  W7a P:CellBody }HH >bFHHH  W8aP }H >dGIH  W9aN }H >fHJH  W:aN } H >hIK H  W;a }H >jJLH  W<aP:CellHeading }HH >lKMHH  W=aP }H >nLNH  W>aN }H >pMOH  W?aN } H >rNP H  W@a }H >tOQH  WAa P:Footnote }HH >vPRHH  WBaP }H >xQSH  WCaN }H >zRTH  WDaN } H >|SU H  WEa }ȝH(>~TVȝH( WFa P:Bulleted }HȝH(>UWHȝH((GaLI Ha Parent = UL QIa Depth = 0 }ȝH(>VXȝH( WJaN }ȝH(>WYȝH( WKaN } ȝH(>XZ ȝH( WLa }H >Y[H WMa P:Heading2 }HH >Z\HH WNaH* }H >[]H WOaN }H >\^H WPaN } H >]_ H WQa }H>^`HR! P:HeadingRuPAnIn }HH>_aHH WSaP }H>`bH WTaN }H>acH WUaN } H>bd H WVa }7H >ce7H WWa P:Indented }H7H >dfH7H WXaP }7H >eg7H WYaN }7H >fh7H WZaN } 7H >gi 7H W[a }CH>hjCH\! P:TableFootPAnote }HCH>ikHCH W]aP }CH>jlCH W^aN }CH>kmCH W_aN } CH>ln CH W`a }]H(>mo]H( Waa P:TableTitle }H]H(>npH]H((baLI ca Parent = OL Qda Depth = 0 }]H(>oq]H( WeaN }]H(>pr]H( WfaN } ]H(>qs ]H( Wga }֝H >rt֝H Wha P:BodySpaced }H֝H >suH֝H WiaP }֝H >tv֝H WjaN }֝H >uw֝H WkaN } ֝H >vx ֝H Wla }띝H >wy띝H WmaP:Date }H띝H >xzH띝H WnaP }띝H >y{띝H WoaN }띝H >z|띝H WpaN } 띝H >{} 띝H Wqa }H(>|~H(r! P:NumberedPASpaced }HH(>}HH((saP ta Parent = OL Qua Depth = 0 }H(>~H( WvaN }H(>H( WwaY } H(> H( Wxa }H >H WyaP:DateProject }HH >HH WzaP }H >H W{aN }H >H W|aN } H > H W}a }H >H W~a C:BoldItalic }HH > HH WaSTRONG }H > H WaN }H > H WaN } H > H Wa }H> H! C:EquationPA Variables }HH> HH WaEM }H> H WaN }H>H WaN } H> H Wa }H >H Wa C:Italic }HH >HH W aEM }H ?H W aN }H ?H W aN } H ? H W a }H ?H W aC:Bold }HH ?HH WaSTRONG }H ? H WaN }H ? H WaN } H ? H Wa }H?H! X:Heading & PAPage }HH?HH Wa See Also }H?H WaN }H?H WaN } H? H Wa })H ?!)H WaX:Page }H)H ? "H)H Wa See Also })H ?!#)H WaN })H ? "$)H WaN } )H ?"#% )H Wa }5H?$$&5H! X:See HeadPA ing & Page }H5H?&%'H5H Wa See Also }5H?(&(5H WaN }5H?*')5H WaN } 5H?,(* 5H W a }OH ?.)+OH W!a X:Table All }HOH ?0*,HOH W"a See Also }OH ?2+-OH W#aN }OH ?4,.OH W$aN } OH ?6-/ OH W%a }[H?8.0[H &! X:Table NumPA ber & Page }H[H?:/1H[H  W'a See Also }[H?<02[H  W(aN }[H?>13[H  W)aN } [H?@24 [H  W*a }uH?B35uH !W+a X:Heading }HuH?D46HuH!,! USE XREF PAFMT }uH?F57uH !W-aN }uH?H68uH !W.aN } uH?J79 uH !W/a }蝝H?L8:蝝H "W0a P:Header }H蝝H?N9;H蝝H"1!THROW PAAWAY }蝝H?P:<蝝H "W2aN }蝝H?R;=蝝H "W3aN } 蝝H?T<> 蝝H "W4a }H ?V=?H #W5a }HH ?X>@HH #W6a }H ?Z?AH #W7a }H ?\@BH #W8a } H ?^AC H #W9a }d ?aBFd $W:aHTML Options Table }Dd ?cDd $W;a }Dd ?eDd $W<a }D ?gCGD %W=a }DH ?iFHDH %W>a }H ?kGIH %W?a }םD ?mHJםD &W@a Image Format }DםH ?oIKDםH &WAaIMAGGIF }םH ?qJLםH &WBa }D ?sKMD 'WCaBanners }DH ?uLNDH 'WDaN }H ?wMOH 'WEa }ԝD?yNPԝD(F! Banner ReferPA ence Frame }DԝH?{OQDԝH (WGa }ԝH?}PԝH (WHa }D(?>SD((@)I! Copy Files  Imported by PA Rerefernce }DH(?>RTDH( @)WJa }H(?>SUH( @)WKa }DD ?>TVDD @*WLa }DDH ?>UWDDH @*WMa }DH ?>VXDH @*WNa }Vd ?>W[Vd @+WOaSystem Macros }?Vd ?>?Vd @+WPa }?Vd ?>?Vd @+WQa }f? ?>X\f? @,WRa Macro Name }?fH ?>[]?fH @,WSa Replace With }fH ?>\^fH @,WTa Comments }r? ?>]_r? @-WUa StartOfDoc }?rH ?>^`?rH @-WVa }rH ?>_arH @-WWa }~? ?>`b~? @.WXa EndOfDoc }?~H ?>ac?~H @.WYa }~H ?>bd~H @.WZa }??>ce?@/[! StartOfSubPADoc }?H?>df?H @/W\a }H?>egH @/W]a }??>fh?@0^! EndOfSubPADoc }?H?>gi?H @0W_a }H?>hjH @0W`a }??>ik?@1a! StartOfFirstPASubDoc }?H?>jl?H @1Wba }H?>kmH @1Wca }??>ln?@2d! EndOfFirstPASubDoc }?H?>mo?H @2Wea }H?>npH @2Wfa }??>oq?@3g! StartOfLastPASubDoc }?H?>pr?H @3Wha }H?>qsH @3Wia } ??>rt ?@4j! EndOfLastPASubDoc }? H?>su? H @4Wka } H?>tv H @4Wla }&? ?>uw&? @5Wma }?&H ?>vx?&H @5Wna }&H ?>wy&H @5Woa }8d ?>x|8d @6WpaCross-Reference Macros }?8d ?>?8d @6Wqa }?8d ?>?8d @6Wra }H? ?>y}H? @7Wsa Macro Name }?HH ?>|~?HH @7Wta Replace With }HH ?>}HH @7Wua Comments }T??>~T? @8Wva See Also }?TH?>?TH@8w! See Also: PA <$paratext> }TH?>TH @8Wxa }n? ?>n? @9Wya }?nH ?>?nH @9Wza }nH ?>nH @9W{a }d ?> d @:WaGeneral Macros }?d ?>?d @:Wa }?d ?>?d @:Wa }?d ?>?d @:Wa }? ?>"? @;Wa Macro Name d@ d@ d 靕l d@ do  W܁܁Bm }蝝d @ 蝝d  <W|aHeadings Table }H蝝d @  H蝝d  <W}a }H蝝d @" H蝝d  <W~a }H@$ H =!Paragraph ForPAmat }HH@& HH  =WaHeading Level }H@( H  =Wa Comments }H@* H >W aTitle }HH@, HH  >Wa }H@. H  >Wa }KH @0 KH  ?Wa Heading1 }HKH @2 HKH  ?Wa }KH @4 KH  ?Wa }WH @6 WH  @Wa Heading2 }HWH @8 HWH  @W a }WH @: WH  @W a }cH @< cH  AW a }HcH @> HcH  AW a }cH @@ cH  AW a "d=8H}?H ?> #?H @;Wa Replace With }H ?>"$H @;WaHead }H ?>#%H @;Wa Comments }? ?>$&? @BWa }?H ?>%'?H @BW a }H ?>&(H @BW!a }H ?>')H @BW"a }d @>(.d @CW#aCharacter Macros HH;"HH❝+G܁e HH;$3HH**靕l}?d @>?d @CW$a }?d @>?d @CW%a }? @>)/? @DW&a Macro Name }?H @ >.0?H @DW'a Replace With }H @ >/1H @DW(a Comments }? @ >0<? @EW)a HUV ;.HUV ❝3G܁e HUV ;05+HUV 22靕l H$ ;1H$ 5G܁e H$ ;33H$ 44靕l HH;4HHǝ007- `Producer Consumer Problem 1,` Introduction 2܁`[This algorithm uses a monitor to solve the producer/consumer (or bounded-buffer) problem. 4V` Algorithm 5܁h`(1  buffer : monitor ; 6t`] 2 var  slots :  array  [0.. n -1]  of  item; 7`F 3  count ,  in ,  out : integer; 8`A 4  notempty ,  notfull : condition; 9`U 5 procedure   entry   deposit ( data : item); :` 6 begin ;`C 7  if   count  =  n   then <`1 8  notfull . wait ; =`: 9 slots [ in ] :=  data ; >`K 10  in  :=  in  + 1  mod   n ; ?`7 11  count  :=  count  + 1; @`4 12  notempty . signal ; A` 13 end ; B`d 14 procedure   entry   extract ( var   data : item); C` 15 begin D`: 16  if   count  = 0  then E`3 17  notempty . wait ; F`< 18 data  :=  slots [ out ]; G`M 19  out  :=  out  + 1  mod   n ; H`7 20  count  :=  count  1; I`3 21  notfull . signal ; J` 22 end ; K` 23 begin L`L 24  count  := 0;  in  := 0;  out  := 0; M` 25 end . O` Comments P܁$lines 2-4Here,  slots  is the actual buffer,  count  the number of items in the buffer, and  in  and  out  the 0lindices of the next element of  slots  where a deposit is to be made or from which an extraction is cto be made. There are two conditions we care about: if the buffer is not full (represented by the mcondition variable  notfull ), and if the buffer is not empty (represented by the condition variable  Dnotempty ). 3Q$sline 5The keyword  entry  means that this procedure may be called from outside the monitor. It is called Uby placing the name of the monitor first, then a period, then the function name; so, D'buffer . deposit () . #R$plines 7-8This code checks to see if there is room in the buffer for a new item. If not, the process blocks on gthe condition  notfull ; when some other process does extract an element from the buffer, then ithere will be room and that process will signal on the condition  notfull , allowing the blocked bone to proceed. Note that while blocked on this condition, other processes may access procedures Dwithin the monitor. 1S+$plines 9-11This code actually deposits the item into the buffer. Note that the monitor guarantees mutual excluDsion. aT$jline 12Just as a producer will block on a full buffer, a consumer will block on an empty one. This indiccates to any such consumer process that the buffer is no longer empty, and unblocks exactly one of DGthem. If there are no blocked consumers, this is effectively a no-op. HH;6HHB66 靕lH$ =!:H$ 99靕l H$ =!H$ 8W܁܁l@April 19, 1999ECS 150 Spring 1999Page 2 HUV =!8HHUV GG靕l EGxR=EGxREPwEPw TableFootnote}?H @>1=?H @EW*a }H @><H @EW+a d@??d@>d@@ 靕l d@>dR=?RUX[^adgjmpsvy| %).1 HH@tHHBU܁܁ Sline 14As with the previous procedure, this is called from outside the monitor by 큩@'buffer . extract () . #V slines 16-17 This code checks to see if there is any unconsumed item in the buffer. If not, the process blocks on fthe condition  notempty ; when some other process does deposit an element in the buffer, then athere will be something for the consumer to extract and that producer process will signal on the jcondition  notempty , allowing the blocked one to proceed. Note that while blocked on this condi@@tion, other processes may access procedures within the monitor. !W klines 18-20This code actually extracts the item from the buffer. Note that the monitor guarantees mutual @ exclusion. !X jline 21Just as a consumer will block on an empty buffer, a producer will block on a full one. This indibcates to any such producer process that the buffer is no longer full, and unblocks exactly one of @Gthem. If there are no blocked producers, this is effectively a no-op. Y`-lines 23-25This is the initialization part. A` HH@vHH7AA 靕l HUV =!HUV ❝:W܁܁l?Last modified at 10:43 pm on Monday, April 19, 1999 HH=!:HHII 靕l HH=!HH❝HW܁܁e dLeftd!Rightd Referenced dHTMLd>HTMLd HeadingsdĿ@@ GMapping Table Title. Ŀ@@ GBody. f@ GBody. f@ G BodySpaced. Ŀ@@ GFooter. f@T G TableTitleT:Table : . f@ G Bulleted\t. f@ G...Date. mf@ Gl. DateProject. Ŀ@@ GHeader Double Line. f@T GHeading1Body. f@ G Numbered.\t. f@E G Numbered1.\tNumbered. f@ G NumberedSpaced.\t. f@ G.Reading. f@ GBody. Ŀ@@ GHeader Double Line. f@ G CellFooting. f@ G CellHeading. f@ G CellBody. Ŀ@@ GMapping Table Cell.  f@PGTitleBody. Ŀ@@Mapping Table Cell. f@$G.Line Single Line. Ŀ@@ Mapping Table Cell. Ŀ@@ GMapping Table Cell. f@ GCellBody. f@ G CellHeading. f@ G Footnote. f@T GHeading2Body. f@T G HeadingRunInBody. f@ G Indented. f@ G TableFootnote. f@T G TableTitleT:Table : .  f@PGTitleBody.  f@T GHeading1Body. f@ G .$.H.l..... .D.h.Code. Hf@ GH. LineComment. f@ G .$.H.l..... .D.h.Code. Hf@ GH. LineComment.  G GG蜜Emphasis G蜜  G GG蜜EquationVariables  蜜 BoldItalic ۸GItalic G     G G GBold    G G GZZThinMediumDoubleThick@ Very Thin HHHHHFormat A HHHHHFormat BH Mapping TableH Mapping Tableh*|#HHHHHf$*DHH+5?HH&69?HH :B?HHH CE?HH*6 ? @ h( A B C D E h  F G H I J h  K L M N O 𝝡h  P Q R S T ȝh( UVWXYh Z[\]^h_`abc7h defghChijklm]h(nopqr֝h stuvw띝h xyz{|h(}~h h    𝝡h  h h h)h  !"#$5h%&'()Oh  *+,-.[h!/ 0 1 2 3 uh "4!5!6!7!8!蝝h!#9":";"<"="h ">#?#@#A#B# %C$D$E$ $&F%G%H%ם %'I&J&K& &(L'M'N'ԝ')O(P(Q(((*@R)S)T)D )@U*V*W*V ,@X+Y+Z+f +-@[,\,],r ,.@^-_-`-~ -/@a.b.c..0@d/e/f//1@g0h0i002@j1k1l113@m2n2o224@p3q3r3 35@s4t4u4& 4@v5w5x58 7@y6z6{6H 68@|7}7~7T79@888n 8@999 ;@:::: :B@ ;";#;$;蝝 =  <<<<> ====? >>>K >@ ???W ?A @@@c @ AAA ;@%B&B'B(B D@)C,C-C CE@.D/D0D D@1E" sX 5RBk3Zaŏ$v&]^pg- YbecÄa]G.