• Non ci sono risultati.

Esercizi di mutua esclusione e sincronizzazione (2)

N/A
N/A
Protected

Academic year: 2021

Condividi "Esercizi di mutua esclusione e sincronizzazione (2)"

Copied!
147
0
0

Testo completo

(1)

Esercizi di mutua esclusione e

sincronizzazione (2)

Alessandro A. Nacci

[email protected]

ACSO

2014/2014

1

(2)

2

(3)

Esercizio 13

Il problema dei cinque filosofi

3

1

7bis. Esercitazione su sincronizzazione di processi 1 marco lapegna

!"#$%&'()*()+(,-"#,(../.(#,&

!"#$%&'()*()+(,-"#,(../.(#,&

! 0"#$%&'/)*&()-(,12&)3(%#+#3(

! 0"#$%&'/)*&()%&44#"()&)*&5%()+-"(44#"(

! 0"#$%&'/)*&%)$/"$(&"&)+#,,#%&,4#

7bis. Esercitazione su sincronizzazione di processi 2 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3(

!"#$%&'/)*&()-(,12&)3(%#+#3(

! 6(,12&)3(%#+#3( 0/++/,#)%/)7(4/)0&,+/,*#)

&)'/,5(/,*#8)/44#",#)/*)2,/)4/7#%/)

"#4#,*/9)):%) -&,4"#))*&%%/))4/7#%/) 7());) 2,/)).200(&"/)))*() "(+#) &))%/))4/7#%/);) /00/"&--<(/4/)-#,)-(,12&)$/--<&44&9

! =2/,*#) 2,)3(%#+#3#))0&,+/),#,)

(,4&"/5(+-& -#,)() -#%%&5<(9)=2/,*#)5%()) 7(&,& 3/'&) 4&,4/ *())('0#++&++/"+())

*&%%&)$/--<&44&))-<&)+4/,,#)/%%/)+2/)

*&+4"/)&*)/%%/)+2/)+(,(+4"/9)>%)3(%#+#3#) 02?)0"&,*&"&)2,/)+#%/)$/--<&44/)0&") 7#%4/9

! =2/,*#)2,) 3(%#+#3#)/33/'/4#)0#++(&*&)

*2&)$/--<&44&)-#,4&'0#"/,&/'&,4&8) '/,5(/9) &"'(,/4#)(%)0/+4#8)/00#55(/)%&)

$/--<&44&)&)"(-#'(,-(/)/)0&,+/"&9

7bis. Esercitazione su sincronizzazione di processi 3 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3(

!"#$%&'/)*&()-(,12&)3(%#+#3(

" !( 02?))))"/00"&+&,4/"&))))-(/+-2,/)$/--<&44/)-#,)2,)

+&'/3#"#9

" "5,( 3(%#+#3#))4&,4/)*()/33&""/"& 2,/)$/--<&44/))-#,))

2,##0&"/.(#,&))*())

$/(4

&))%/)))"(%/+-(/ &+&52&,*#))

+(5,/%

!()

$/--<&44/%(&'())*&+4"/*

$/--<&44/%(())+(,(+4"/*

7bis. Esercitazione su sincronizzazione di processi 4 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3()

!"#$%&'/)*&()-(,12&)3(%#+#3() +)+#%2.(#,&)' +)+#%2.(#,&)'

! ,/"(/$(%()-#,*(7(+&+

+&'/0<#"&)$/--<&44/%)-)(. //)4244()5%()&%&'&,4()(,(.(/%(../4( /)'

! 0(%#+#3#

()

+

*#)1$/(4)$/--<&44/% ()(*

$/(4)$/--<&44/%)(&'*)2)-(*

'/,5(/3

+(5,/%)$/--<&44/% ()(*.3

+(5,/%)$/--<&44/%)(&'*)2)-(*.

0&,+/3 4)$<(%&))'*.3

!"&,*&)$/--<9)+(,(+4"/

!"&,*&)$/--<9)*&+4"/

%/+-(/)$/--<9)+(,(+4"/

%/+-(/)$/--<9)*&+4"/

!&.(#,&)-"(4(-/

(4)

Esercizio 13

Il problema dei cinque filosofi

4

1

7bis. Esercitazione su sincronizzazione di processi 1 marco lapegna

!"#$%&'()*()+(,-"#,(../.(#,&

!"#$%&'()*()+(,-"#,(../.(#,&

! 0"#$%&'/)*&()-(,12&)3(%#+#3(

! 0"#$%&'/)*&()%&44#"()&)*&5%()+-"(44#"(

! 0"#$%&'/)*&%)$/"$(&"&)+#,,#%&,4#

7bis. Esercitazione su sincronizzazione di processi 2 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3(

!"#$%&'/)*&()-(,12&)3(%#+#3(

! 6(,12&)3(%#+#3( 0/++/,#)%/)7(4/)0&,+/,*#)

&)'/,5(/,*#8)/44#",#)/*)2,/)4/7#%/)

"#4#,*/9)):%) -&,4"#))*&%%/))4/7#%/) 7());) 2,/)).200(&"/)))*() "(+#) &))%/))4/7#%/);) /00/"&--<(/4/)-#,)-(,12&)$/--<&44&9

! =2/,*#) 2,)3(%#+#3#))0&,+/),#,)

(,4&"/5(+-& -#,)() -#%%&5<(9)=2/,*#)5%()) 7(&,& 3/'&) 4&,4/ *())('0#++&++/"+())

*&%%&)$/--<&44&))-<&)+4/,,#)/%%/)+2/)

*&+4"/)&*)/%%/)+2/)+(,(+4"/9)>%)3(%#+#3#) 02?)0"&,*&"&)2,/)+#%/)$/--<&44/)0&") 7#%4/9

! =2/,*#)2,) 3(%#+#3#)/33/'/4#)0#++(&*&)

*2&)$/--<&44&)-#,4&'0#"/,&/'&,4&8) '/,5(/9) &"'(,/4#)(%)0/+4#8)/00#55(/)%&)

$/--<&44&)&)"(-#'(,-(/)/)0&,+/"&9

7bis. Esercitazione su sincronizzazione di processi 3 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3(

!"#$%&'/)*&()-(,12&)3(%#+#3(

" !( 02?))))"/00"&+&,4/"&))))-(/+-2,/)$/--<&44/)-#,)2,)

+&'/3#"#9

" "5,( 3(%#+#3#))4&,4/)*()/33&""/"& 2,/)$/--<&44/))-#,))

2,##0&"/.(#,&))*()) $/(4 &))%/)))"(%/+-(/ &+&52&,*#)) +(5,/%

!

()

$/--<&44/%(&'())*&+4"/*

$/--<&44/%(())+(,(+4"/*

7bis. Esercitazione su sincronizzazione di processi 4 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3()

!"#$%&'/)*&()-(,12&)3(%#+#3() +)+#%2.(#,&)' +)+#%2.(#,&)'

! ,/"(/$(%()-#,*(7(+&+

+&'/0<#"&)$/--<&44/%)-)(. //)4244()5%()&%&'&,4()(,(.(/%(../4( /)'

! 0(%#+#3# () +

*#)1 $/(4)$/--<&44/% ()(*

$/(4)$/--<&44/%)(&'*)2)-(* '/,5(/ 3

+(5,/%)$/--<&44/% ()(*. 3

+(5,/%)$/--<&44/%)(&'*)2)-(*. 0&,+/ 3

4)$<(%&))'*. 3

!"&,*&)$/--<9)+(,(+4"/

!"&,*&)$/--<9)*&+4"/

%/+-(/)$/--<9)+(,(+4"/

%/+-(/)$/--<9)*&+4"/

!&.(#,&)-"(4(-/

post

(5)

Il problema dei cinque filosofi

Soluzione 1

5

1

7bis. Esercitazione su sincronizzazione di processi 1 marco lapegna

!"#$%&'()*()+(,-"#,(../.(#,&

!"#$%&'()*()+(,-"#,(../.(#,&

! 0"#$%&'/)*&()-(,12&)3(%#+#3(

! 0"#$%&'/)*&()%&44#"()&)*&5%()+-"(44#"(

! 0"#$%&'/)*&%)$/"$(&"&)+#,,#%&,4#

7bis. Esercitazione su sincronizzazione di processi 2 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3(

!"#$%&'/)*&()-(,12&)3(%#+#3(

! 6(,12&)3(%#+#3( 0/++/,#)%/)7(4/)0&,+/,*#)

&)'/,5(/,*#8)/44#",#)/*)2,/)4/7#%/)

"#4#,*/9)):%) -&,4"#))*&%%/))4/7#%/) 7());) 2,/)).200(&"/)))*() "(+#) &))%/))4/7#%/);) /00/"&--<(/4/)-#,)-(,12&)$/--<&44&9

! =2/,*#) 2,)3(%#+#3#))0&,+/),#,)

(,4&"/5(+-& -#,)() -#%%&5<(9)=2/,*#)5%()) 7(&,& 3/'&) 4&,4/ *())('0#++&++/"+())

*&%%&)$/--<&44&))-<&)+4/,,#)/%%/)+2/)

*&+4"/)&*)/%%/)+2/)+(,(+4"/9)>%)3(%#+#3#) 02?)0"&,*&"&)2,/)+#%/)$/--<&44/)0&") 7#%4/9

! =2/,*#)2,) 3(%#+#3#)/33/'/4#)0#++(&*&)

*2&)$/--<&44&)-#,4&'0#"/,&/'&,4&8) '/,5(/9) &"'(,/4#)(%)0/+4#8)/00#55(/)%&)

$/--<&44&)&)"(-#'(,-(/)/)0&,+/"&9

7bis. Esercitazione su sincronizzazione di processi 3 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3(

!"#$%&'/)*&()-(,12&)3(%#+#3(

" !( 02?))))"/00"&+&,4/"&))))-(/+-2,/)$/--<&44/)-#,)2,)

+&'/3#"#9

" "5,( 3(%#+#3#))4&,4/)*()/33&""/"& 2,/)$/--<&44/))-#,))

2,##0&"/.(#,&))*())

$/(4

&))%/)))"(%/+-(/ &+&52&,*#))

+(5,/%

!()

$/--<&44/%(&'())*&+4"/*

$/--<&44/%(())+(,(+4"/*

7bis. Esercitazione su sincronizzazione di processi 4 marco lapegna

!"#$%&'/)*&()-(,12&)3(%#+#3()

!"#$%&'/)*&()-(,12&)3(%#+#3() +)+#%2.(#,&)' +)+#%2.(#,&)'

! ,/"(/$(%()-#,*(7(+&+

+&'/0<#"&)$/--<&44/%)-)(. //)4244()5%()&%&'&,4()(,(.(/%(../4( /)'

! 0(%#+#3#

()

+

*#)1$/(4)$/--<&44/% ()(*

$/(4)$/--<&44/%)(&'*)2)-(*

'/,5(/3

+(5,/%)$/--<&44/% ()(*.3

+(5,/%)$/--<&44/%)(&'*)2)-(*.

0&,+/3 4)$<(%&))'*.3

!"&,*&)$/--<9)+(,(+4"/

!"&,*&)$/--<9)*&+4"/

%/+-(/)$/--<9)+(,(+4"/

%/+-(/)$/--<9)*&+4"/

!&.(#,&)-"(4(-/

post post

(6)

Il problema dei cinque filosofi

Soluzione 1: deadlock

6

2

7bis. Esercitazione su sincronizzazione di processi 5 marco lapegna

!"#$%&"'()'+)56.57"18

!"#$%&"'()'+)56.57"18

3( 4$44&) &))5&#"3"5&)67''"))578())9"'4(8:";7'(78('4( ()

:;('<"'" #7 =7996(447)7##7)#";")3&'&34;7)'(33$'"):$"#):;('<(;()

#7)=7996(447)7##7)3$7)<(34;7 )56.57"18*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C)<":")7D(;):;(3")#7):;&87)5";96(447C) D(;&5&97)3()#7)3(9"'<7)(#)<&3:"'&=&#(E)F')973")

9"'4;7;&"):"37)7'96())#7):;&87

7bis. Esercitazione su sincronizzazione di processi 6 marco lapegna

3"#$%&"'()9+ 3"#$%&"'()9+

<")1

$6&#()'"4E('4;78=(*1 :;('<&))&)*.

&5))=%)&&'*)2)-():);*)1 :;('<&)))&&'*)2)-)*. ('4;78=()<)4;$( 4)(#3(1

:"37))&)*. 4 4

387'B&7 3

:"37))&)*.

:"37)))&&'*)2)-)*. ('4;78=()<)57#3(.

3:('37 4)$6&#())'*.3

D"&<):;('<&)&'4)&*1)

$7&4))=8$4(>)*.

$7&4))==7996(447%)&)()*

=%)&)()??.

3&B'7#))=8$4(>*. 4

D"&<):"37)&'4)&*1

$7&4))=8$4(>)*.

=%)&)()&&.

3&B'7#))==7996(447%)&)()*. 3&B'7#))=8$4(>)*.

4

=%-()7;;7@)<&))&'4(;&)9"'<&D&3" 96()A;(:#&97B)&#)9"'4('$4")<&

=7996(447%-(

7bis. Esercitazione su sincronizzazione di processi 7 marco lapegna

3"#$%&"'()9+)! .C,. F"D 3"#$%&"'()9+)! .C,. F"D

9#()&#);&396&")96()4$44&)&)5&#"3"5&)):;('<"'")#7)=7996(447)3&'&34;7C) D(<"'")96()#7)<(34;7)(#)"99$:747)():"37'")<&)'$"D")#7)3&'&34;7E

)! .C,. F"D*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C):;&87)<&)87'B&7;()3&)733&9$;7)<&)7D(;) :;(3")('4;78=()#()=7996(44(

7bis. Esercitazione su sincronizzazione di processi 8 marco lapegna

5(7<#"9E)()347;D74&"' 5(7<#"9E)()347;D74&"'

5(7<#"9E+)&'3&(8()<&):;"9(33& =#"9974&))3$)$'7)&34;$%&"'()

$7&4*C)"B'$'")<(&)`$7#&))&')744(37)96()3&)#&=(;7)$'7));&3";37) 733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

!47;D74&"'+)&'3&(8()<&):;"9(33&)&')(3(9$%&"'( 96()4('47'")

;&:(4$478('4()3('%7)3$99(33")<&)799(<(;()7<)$'7);&3";37)

733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

(7)

2

7bis. Esercitazione su sincronizzazione di processi 5 marco lapegna

!"#$%&"'()'+)56.57"18

!"#$%&"'()'+)56.57"18

3( 4$44&) &))5&#"3"5&)67''"))578())9"'4(8:";7'(78('4( () :;('<"'" #7 =7996(447)7##7)#";")3&'&34;7)'(33$'"):$"#):;('<(;()

#7)=7996(447)7##7)3$7)<(34;7 )56.57"18*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C)<":")7D(;):;(3")#7):;&87)5";96(447C) D(;&5&97)3()#7)3(9"'<7)(#)<&3:"'&=&#(E)F')973")

9"'4;7;&"):"37)7'96())#7):;&87

7bis. Esercitazione su sincronizzazione di processi 6 marco lapegna

3"#$%&"'()9+

3"#$%&"'()9+

<")1

$6&#()'"4E('4;78=(*1 :;('<&))&)*.

&5))=%)&&'*)2)-():);*)1 :;('<&)))&&'*)2)-)*.

('4;78=()<)4;$(

4)(#3(1

:"37))&)*.

4 4

387'B&7 3

:"37))&)*.

:"37)))&&'*)2)-)*.

('4;78=()<)57#3(.

3:('37 4)$6&#())'*.3

D"&<):;('<&)&'4)&*1)

$7&4))=8$4(>)*.

$7&4))==7996(447%)&)()*

=%)&)()??.

3&B'7#))=8$4(>*.

4

D"&<):"37)&'4)&*1

$7&4))=8$4(>)*.

=%)&)()&&.

3&B'7#))==7996(447%)&)()*.

3&B'7#))=8$4(>)*.

4

=%-()7;;7@)<&))&'4(;&)9"'<&D&3"

96()A;(:#&97B)&#)9"'4('$4")<&

=7996(447%-(

7bis. Esercitazione su sincronizzazione di processi 7 marco lapegna

3"#$%&"'()9+)! .C,. F"D 3"#$%&"'()9+)! .C,. F"D

9#()&#);&396&")96()4$44&)&)5&#"3"5&)):;('<"'")#7)=7996(447)3&'&34;7C) D(<"'")96()#7)<(34;7)(#)"99$:747)():"37'")<&)'$"D")#7)3&'&34;7E

)! .C,. F"D*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C):;&87)<&)87'B&7;()3&)733&9$;7)<&)7D(;) :;(3")('4;78=()#()=7996(44(

7bis. Esercitazione su sincronizzazione di processi 8 marco lapegna

5(7<#"9E)()347;D74&"' 5(7<#"9E)()347;D74&"'

5(7<#"9E+)&'3&(8()<&):;"9(33& =#"9974&))3$)$'7)&34;$%&"'()

$7&4*C)"B'$'")<(&)`$7#&))&')744(37)96()3&)#&=(;7)$'7));&3";37) 733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

!47;D74&"'+)&'3&(8()<&):;"9(33&)&')(3(9$%&"'( 96()4('47'")

;&:(4$478('4()3('%7)3$99(33")<&)799(<(;()7<)$'7);&3";37) 733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

Il problema dei cinque filosofi

Soluzione 2

7

postpost Dato l’i-esimo filosofo…

Nel caso del

filosofo #5, con

%5 prendo la prima forchetta (è una tavola rotonda!)

In questo esercizio la notazione per

i mutex è differente:

lock -> wait unlock -> post

(8)

Il problema dei cinque filosofi

Soluzione 2: starvation

8

2

7bis. Esercitazione su sincronizzazione di processi 5 marco lapegna

!"#$%&"'()'+)56.57"18

!"#$%&"'()'+)56.57"18

3( 4$44&) &))5&#"3"5&)67''"))578())9"'4(8:";7'(78('4( ()

:;('<"'" #7 =7996(447)7##7)#";")3&'&34;7)'(33$'"):$"#):;('<(;()

#7)=7996(447)7##7)3$7)<(34;7 )56.57"18*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C)<":")7D(;):;(3")#7):;&87)5";96(447C) D(;&5&97)3()#7)3(9"'<7)(#)<&3:"'&=&#(E)F')973")

9"'4;7;&"):"37)7'96())#7):;&87

7bis. Esercitazione su sincronizzazione di processi 6 marco lapegna

3"#$%&"'()9+ 3"#$%&"'()9+

<")1

$6&#()'"4E('4;78=(*1 :;('<&))&)*.

&5))=%)&&'*)2)-():);*)1 :;('<&)))&&'*)2)-)*. ('4;78=()<)4;$( 4)(#3(1

:"37))&)*. 4 4

387'B&7 3

:"37))&)*.

:"37)))&&'*)2)-)*. ('4;78=()<)57#3(.

3:('37 4)$6&#())'*.3

D"&<):;('<&)&'4)&*1)

$7&4))=8$4(>)*.

$7&4))==7996(447%)&)()*

=%)&)()??.

3&B'7#))=8$4(>*. 4

D"&<):"37)&'4)&*1

$7&4))=8$4(>)*.

=%)&)()&&.

3&B'7#))==7996(447%)&)()*. 3&B'7#))=8$4(>)*.

4

=%-()7;;7@)<&))&'4(;&)9"'<&D&3" 96()A;(:#&97B)&#)9"'4('$4")<&

=7996(447%-(

7bis. Esercitazione su sincronizzazione di processi 7 marco lapegna

3"#$%&"'()9+)! .C,. F"D 3"#$%&"'()9+)! .C,. F"D

9#()&#);&396&")96()4$44&)&)5&#"3"5&)):;('<"'")#7)=7996(447)3&'&34;7C) D(<"'")96()#7)<(34;7)(#)"99$:747)():"37'")<&)'$"D")#7)3&'&34;7E

)! .C,. F"D*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C):;&87)<&)87'B&7;()3&)733&9$;7)<&)7D(;) :;(3")('4;78=()#()=7996(44(

7bis. Esercitazione su sincronizzazione di processi 8 marco lapegna

5(7<#"9E)()347;D74&"' 5(7<#"9E)()347;D74&"'

5(7<#"9E+)&'3&(8()<&):;"9(33& =#"9974&))3$)$'7)&34;$%&"'()

$7&4*C)"B'$'")<(&)`$7#&))&')744(37)96()3&)#&=(;7)$'7));&3";37) 733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

!47;D74&"'+)&'3&(8()<&):;"9(33&)&')(3(9$%&"'( 96()4('47'")

;&:(4$478('4()3('%7)3$99(33")<&)799(<(;()7<)$'7);&3";37)

733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

(9)

Il problema dei cinque filosofi

Deadlock & Starvation

9

2

7bis. Esercitazione su sincronizzazione di processi 5 marco lapegna

!"#$%&"'()'+)56.57"18

!"#$%&"'()'+)56.57"18

3( 4$44&) &))5&#"3"5&)67''"))578())9"'4(8:";7'(78('4( ()

:;('<"'" #7 =7996(447)7##7)#";")3&'&34;7)'(33$'"):$"#):;('<(;()

#7)=7996(447)7##7)3$7)<(34;7 )56.57"18*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C)<":")7D(;):;(3")#7):;&87)5";96(447C) D(;&5&97)3()#7)3(9"'<7)(#)<&3:"'&=&#(E)F')973")

9"'4;7;&"):"37)7'96())#7):;&87

7bis. Esercitazione su sincronizzazione di processi 6 marco lapegna

3"#$%&"'()9+

3"#$%&"'()9+

<")1

$6&#()'"4E('4;78=(*1 :;('<&))&)*.

&5))=%)&&'*)2)-():);*)1 :;('<&)))&&'*)2)-)*.

('4;78=()<)4;$(

4)(#3(1

:"37))&)*.

4 4

3 87'B&7 3

:"37))&)*.

:"37)))&&'*)2)-)*.

('4;78=()<)57#3(.

3 :('37 4)$6&#())'*. 3

D"&<):;('<&)&'4)&*1)

$7&4))=8$4(>)*.

$7&4))==7996(447%)&)()*

=%)&)()??.

3&B'7#))=8$4(>*.

4

D"&<):"37)&'4)&*1

$7&4))=8$4(>)*.

=%)&)()&&.

3&B'7#))==7996(447%)&)()*.

3&B'7#))=8$4(>)*.

4

=%-()7;;7@)<&))&'4(;&)9"'<&D&3"

96()A;(:#&97B)&#)9"'4('$4")<&

=7996(447%-(

7bis. Esercitazione su sincronizzazione di processi 7 marco lapegna

3"#$%&"'()9+)! .C,. F"D 3"#$%&"'()9+)! .C,. F"D

9#()&#);&396&")96()4$44&)&)5&#"3"5&)):;('<"'")#7)=7996(447)3&'&34;7C) D(<"'")96()#7)<(34;7)(#)"99$:747)():"37'")<&)'$"D")#7)3&'&34;7E

)! .C,. F"D*

A"33&=&#()3"#$%&"'(

"B'&))5&#"3"5"C):;&87)<&)87'B&7;()3&)733&9$;7)<&)7D(;) :;(3")('4;78=()#()=7996(44(

7bis. Esercitazione su sincronizzazione di processi 8 marco lapegna

5(7<#"9E)()347;D74&"' 5(7<#"9E)()347;D74&"'

5(7<#"9E+)&'3&(8()<&):;"9(33& =#"9974&))3$)$'7)&34;$%&"'()

$7&4*C)"B'$'")<(&)`$7#&))&')744(37)96()3&)#&=(;7)$'7));&3";37) 733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

!47;D74&"'+)&'3&(8()<&):;"9(33&)&')(3(9$%&"'( 96()4('47'")

;&:(4$478('4()3('%7)3$99(33")<&)799(<(;()7<)$'7);&3";37)

733(B'747)&')$3")(39#$3&D")<&)$')7#4;"):;"9(33"

(10)

Il problema dei cinque filosofi

Soluzione 3: inefficiente

10

3

7bis. Esercitazione su sincronizzazione di processi 9 marco lapegna

!"#$%&"'()F+),D600,0,6D 6

!"#$%&"'()F+),D600,0,6D 6

2")1

35('67

$7&9)=<$9(>*.3

$7&9)@7AAB(997%)&)(*

$7&9)@7AAB(997%)&&'*)2)-(*

<7'I&73

6&I'7#)@7AAB(997%)&)(*. 3

6&I'7#)@7AAB(997%)&&'*)2)-(*.

6&I'7#)=<$9(>*.

5('673 4)$B&#())'*. 3

KL"9(II(L()#(

A&69L$%&"'&)AL&9&AB(B

')6"#")O&#"6"O")7##7) P"#97)5$"#)<7'I&7L(GG

7bis. Esercitazione su sincronizzazione di processi 10 marco lapegna

!"#$%&"'()H

!"#$%&"'()H

7bis. Esercitazione su sincronizzazione di processi 11 marco lapegna

!"#$%&"'()F))A"'9T*+)"8)

!"#$%&"'()F))A"'9T*+)"8)

P"&2)9(69)&'9)&*)1

&O)6979(%&(<<IJDKCL)==)6979(%760 (G<6^ ,DK)==)6979(%C,KI (G<6^ ,DK*1 6979(%&()<)6^ ,DK. //)A"<$'&A")7I#&)7#9L&)AB()&'&%&")7)<7'I&7L(

6&I'7#))=6%&()*. //)5"66")<7'I&7L(+)6(<7O"L")&' 4 4

P"&2)97E(MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&)(<IJDKCL. //)69")5(L)5L('2(L()#()O"LAB(99(

9(69)&*.

6&I'7#))=<$9(>)*.

$7&9))=6%)&)()*.) //)&'&%&")7)<7'I&7L(T) 4

P"&2 5$9MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&()<) I,D8,DK. //)A"<$'&A")AB()B")O&'&9")2&)<7'I&7L(

9(69)760 *. //)6(<7O"L")7)6&'&69L7)&'

9(69)C,KI *. //)6(<7O"L")7)2(69L7)&'

6&I'7#))=<$9(>)*.

4

7bis. Esercitazione su sincronizzazione di processi 12 marco lapegna

"66(LP7%&"'&

"66(LP7%&"'&

! 6979(%&(<;)))&<;cTTcH)))))))6%&(<;)&<;cTTcH

! ,#)6(<7O"L")(#)L(#79&P")7#)O&#"6"O")()'"')7##7)O"LAB(997

! 77)O$'%&"'()9(69)P(2()6()&)P&A&'&)697''")<7'I&7'2"T),')A76")

A"'9L7L&")2&AB&7L7)AB()&'&%&7)7)<7'I&7L()()7#%7)&#)6(<7O"L"))7@&#&97)

&#)O&#"6"O")7)<7'I&7L(*

! J')O&#"6"O")&')799(67)6$##7))$7&9)&')97E(MO"LE6c)67L7#)6@#"AA79" 27)

$')O&#"6"O")P&A&'")AB()(6(I$()9(69)&')5$9MO"LE6

post post

post

(11)

Il problema dei cinque filosofi

Soluzione 4

11

3

7bis. Esercitazione su sincronizzazione di processi 9 marco lapegna

!"#$%&"'()F+),D600,0,6D 6

!"#$%&"'()F+),D600,0,6D 6

2")1

35('67

$7&9)=<$9(>*.3

$7&9)@7AAB(997%)&)(*

$7&9)@7AAB(997%)&&'*)2)-(*

<7'I&73

6&I'7#)@7AAB(997%)&)(*. 3

6&I'7#)@7AAB(997%)&&'*)2)-(*.

6&I'7#)=<$9(>*.

5('673 4)$B&#())'*. 3

KL"9(II(L()#(

A&69L$%&"'&)AL&9&AB(B

')6"#")O&#"6"O")7##7) P"#97)5$"#)<7'I&7L(GG

7bis. Esercitazione su sincronizzazione di processi 10 marco lapegna

!"#$%&"'()H

!"#$%&"'()H

7bis. Esercitazione su sincronizzazione di processi 11 marco lapegna

!"#$%&"'()F))A"'9T*+)"8)

!"#$%&"'()F))A"'9T*+)"8)

P"&2)9(69)&'9)&*)1

&O)6979(%&(<<IJDKCL)==)6979(%760 (G<6^ ,DK)==)6979(%C,KI (G<6^ ,DK*1 6979(%&()<)6^ ,DK. //)A"<$'&A")7I#&)7#9L&)AB()&'&%&")7)<7'I&7L(

6&I'7#))=6%&()*. //)5"66")<7'I&7L(+)6(<7O"L")&' 4 4

P"&2)97E(MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&)(<IJDKCL. //)69")5(L)5L('2(L()#()O"LAB(99(

9(69)&*.

6&I'7#))=<$9(>)*.

$7&9))=6%)&)()*.) //)&'&%&")7)<7'I&7L(T) 4

P"&2 5$9MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&()<) I,D8,DK. //)A"<$'&A")AB()B")O&'&9")2&)<7'I&7L(

9(69)760 *. //)6(<7O"L")7)6&'&69L7)&'

9(69)C,KI *. //)6(<7O"L")7)2(69L7)&'

6&I'7#))=<$9(>)*.

4

7bis. Esercitazione su sincronizzazione di processi 12 marco lapegna

"66(LP7%&"'&

"66(LP7%&"'&

! 6979(%&(<;)))&<;cTTcH)))))))6%&(<;)&<;cTTcH

! ,#)6(<7O"L")(#)L(#79&P")7#)O&#"6"O")()'"')7##7)O"LAB(997

! 77)O$'%&"'()9(69)P(2()6()&)P&A&'&)697''")<7'I&7'2"T),')A76")

A"'9L7L&")2&AB&7L7)AB()&'&%&7)7)<7'I&7L()()7#%7)&#)6(<7O"L"))7@&#&97)

&#)O&#"6"O")7)<7'I&7L(*

! J')O&#"6"O")&')799(67)6$##7))$7&9)&')97E(MO"LE6c)67L7#)6@#"AA79" 27)

$')O&#"6"O")P&A&'")AB()(6(I$()9(69)&')5$9MO"LE6 Stato di un

generico filosofo (si poteva fare con una enum)

(12)

Il problema dei cinque filosofi

Soluzione 4

12

3

7bis. Esercitazione su sincronizzazione di processi 9 marco lapegna

!"#$%&"'()F+),D600,0,6D 6

!"#$%&"'()F+),D600,0,6D 6

2")1

35('67

$7&9)=<$9(>*.3

$7&9)@7AAB(997%)&)(*

$7&9)@7AAB(997%)&&'*)2)-(*

<7'I&73

6&I'7#)@7AAB(997%)&)(*. 3

6&I'7#)@7AAB(997%)&&'*)2)-(*.

6&I'7#)=<$9(>*.

5('673 4)$B&#())'*. 3

KL"9(II(L()#(

A&69L$%&"'&)AL&9&AB(B

')6"#")O&#"6"O")7##7) P"#97)5$"#)<7'I&7L(GG

7bis. Esercitazione su sincronizzazione di processi 10 marco lapegna

!"#$%&"'()H

!"#$%&"'()H

7bis. Esercitazione su sincronizzazione di processi 11 marco lapegna

!"#$%&"'()F))A"'9T*+)"8)

!"#$%&"'()F))A"'9T*+)"8)

P"&2)9(69)&'9)&*)1

&O)6979(%&(<<IJDKCL)==)6979(%760 (G<6^ ,DK)==)6979(%C,KI (G<6^ ,DK*1 6979(%&()<)6^ ,DK. //)A"<$'&A")7I#&)7#9L&)AB()&'&%&")7)<7'I&7L(

6&I'7#))=6%&()*. //)5"66")<7'I&7L(+)6(<7O"L")&' 4 4

P"&2)97E(MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&)(<IJDKCL. //)69")5(L)5L('2(L()#()O"LAB(99(

9(69)&*.

6&I'7#))=<$9(>)*.

$7&9))=6%)&)()*.) //)&'&%&")7)<7'I&7L(T) 4

P"&2 5$9MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&()<) I,D8,DK. //)A"<$'&A")AB()B")O&'&9")2&)<7'I&7L(

9(69)760 *. //)6(<7O"L")7)6&'&69L7)&'

9(69)C,KI *. //)6(<7O"L")7)2(69L7)&'

6&I'7#))=<$9(>)*.

4

7bis. Esercitazione su sincronizzazione di processi 12 marco lapegna

"66(LP7%&"'&

"66(LP7%&"'&

! 6979(%&(<;)))&<;cTTcH)))))))6%&(<;)&<;cTTcH

! ,#)6(<7O"L")(#)L(#79&P")7#)O&#"6"O")()'"')7##7)O"LAB(997

! 77)O$'%&"'()9(69)P(2()6()&)P&A&'&)697''")<7'I&7'2"T),')A76")

A"'9L7L&")2&AB&7L7)AB()&'&%&7)7)<7'I&7L()()7#%7)&#)6(<7O"L"))7@&#&97)

&#)O&#"6"O")7)<7'I&7L(*

! J')O&#"6"O")&')799(67)6$##7))$7&9)&')97E(MO"LE6c)67L7#)6@#"AA79" 27)

$')O&#"6"O")P&A&'")AB()(6(I$()9(69)&')5$9MO"LE6

post

post

post

(13)

Il problema dei cinque filosofi

Soluzione 4: osservazioni

13

3

7bis. Esercitazione su sincronizzazione di processi 9 marco lapegna

!"#$%&"'()F+),D600,0,6D 6

!"#$%&"'()F+),D600,0,6D 6

2")1

3 5('67

$7&9)=<$9(>*. 3

$7&9)@7AAB(997%)&)(*

$7&9)@7AAB(997%)&&'*)2)-(*

<7'I&7 3

6&I'7#)@7AAB(997%)&)(*. 3

6&I'7#)@7AAB(997%)&&'*)2)-(*.

6&I'7#)=<$9(>*.

5('67 3 4)$B&#())'*. 3

KL"9(II(L()#(

A&69L$%&"'&)AL&9&AB(B

')6"#")O&#"6"O")7##7) P"#97)5$"#)<7'I&7L(GG

7bis. Esercitazione su sincronizzazione di processi 10 marco lapegna

!"#$%&"'()H

!"#$%&"'()H

7bis. Esercitazione su sincronizzazione di processi 11 marco lapegna

!"#$%&"'()F))A"'9T*+)"8)

!"#$%&"'()F))A"'9T*+)"8)

P"&2)9(69)&'9)&*)1

&O)6979(%&(<<IJDKCL)==)6979(%760 (G<6^ ,DK)==)6979(%C,KI (G<6^ ,DK*1 6979(%&()<)6^ ,DK. //)A"<$'&A")7I#&)7#9L&)AB()&'&%&")7)<7'I&7L(

6&I'7#))=6%&()*. //)5"66")<7'I&7L(+)6(<7O"L")&' 4 4

P"&2)97E(MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&)(<IJDKCL. //)69")5(L)5L('2(L()#()O"LAB(99(

9(69)&*.

6&I'7#))=<$9(>)*.

$7&9))=6%)&)()*.) //)&'&%&")7)<7'I&7L(T) 4

P"&2 5$9MO"LE6)&'9)&*)1

$7&9))=<$9(>)*.

6979(%)&()<) I,D8,DK. //)A"<$'&A")AB()B")O&'&9")2&)<7'I&7L(

9(69)760 *. //)6(<7O"L")7)6&'&69L7)&'

9(69)C,KI *. //)6(<7O"L")7)2(69L7)&'

6&I'7#))=<$9(>)*.

4

7bis. Esercitazione su sincronizzazione di processi 12 marco lapegna

"66(LP7%&"'&

"66(LP7%&"'&

! 6979(%&(<;)))&<;cTTcH)))))))6%&(<;)&<;cTTcH

! ,#)6(<7O"L")(#)L(#79&P")7#)O&#"6"O")()'"')7##7)O"LAB(997

! 77)O$'%&"'()9(69)P(2()6()&)P&A&'&)697''")<7'I&7'2"T),')A76")

A"'9L7L&")2&AB&7L7)AB()&'&%&7)7)<7'I&7L()()7#%7)&#)6(<7O"L"))7@&#&97)

&#)O&#"6"O")7)<7'I&7L(*

! J')O&#"6"O")&')799(67)6$##7))$7&9)&')97E(MO"LE6c)67L7#)6@#"AA79" 27)

$')O&#"6"O")P&A&'")AB()(6(I$()9(69)&')5$9MO"LE6

Tratto da: http://wpage.unina.it/lapegna/lucidi/SOmodA/lezione7-bis.pdf

(14)

Esercizio 14

Trova l’errore

14

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼ĥ – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

×Ĕ–üpSĬ²ĩĔpĸĬĔ ¨Ã4¦ z Öē•ûoRĬ±ĨēoķĬ » ē § Ľoûċ ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ Ĕp²× Jłċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼ÊH ć¨Sà Sp¨ 4üĔà ×üł² Sp¨ Sp×ÃćłĔÃH Üł¼óJ 4üĔà Ûċ 4üĔÃääċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔà Ûċ

(15)

Esercizio 14

Trova l’errore

14

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼ĥ – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

×Ĕ–üpSĬ²ĩĔpĸĬĔ ¨Ã4¦ z Öē•ûoRĬ±ĨēoķĬ » ē § Ľoûċ ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ Ĕp²× Jłċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼ÊH ć¨Sà Sp¨ 4üĔà ×üł² Sp¨ Sp×ÃćłĔÃH Üł¼óJ 4üĔà Ûċ 4üĔÃääċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔà Ûċ

Il  problema  consiste  nel  fa1o   che  i  due  thread  operano  

sulla  variabile  conto  con  una   sequenza  le1ura/scri1ura   (operatore  ++)  che  può  

rendere  inconsistente  lo  stato   della  variabile  stessa.  

!

COME  SI  RISOLVE?

(16)

Esercizio 14

Trova l’errore

15

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼ĥ – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

×Ĕ–üpSĬ²ĩĔpĸĬĔ ¨Ã4¦ z Öē•ûoRĬ±ĨēoķĬ » ē § Ľoûċ ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ Ĕp²× Jłċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼ÊH ć¨Sà Sp¨ 4üĔà ×üł² Sp¨ Sp×ÃćłĔÃH Üł¼óJ 4üĔà Ûċ 4üĔÃääċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔà Ûċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ Ĕp²× Jłċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼ĥH ć¨Sà Sp¨ 4üĔà ×üł² Sp¨ Sp×ÃćłĔÃH Üł¼óJ 4üĔà Ûċ 4üĔÃääċ

×üł¼ĔÚ óĔ–Ĭĩ¼ĥ – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔà Ûċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú¨Ã4¦Ûċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

×Ĕ–üpSĬ²ĩĔpĸĬĔ ²ĩĔpĸ z Öē•ûoRĬ±ĨēoķĬ » ē § Ľoûċ 4–ü ĩpü!ÊĿ"ċ

ł¼Ĕ ×üüĔà z Ŀċ

ıÃłS  üpSpüÚıÃłS üˆÛ

ĵ–ł¨pÚ ×üüĔà zz Ŀ Ûċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú²ĩĔpĸÛċ

×üł¼ĔÚó•à ¨pĔĔà óÜćó¼óJ ĩpüÛċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú²ĩĔpĸÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  ĵüłĔpüÚıÃłS üˆÛ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú²ĩĔpĸÛċ

ć×üł¼ĔÚĩpü J óĔ–üpS žÜłóJ Úł¼ĔÛ×Ĕ–üpSĬćp¨ÚÛÛċ

(17)

Esercizio 14

Trova l’errore

15

SI  UTILIZZA NO  I   MUTEX!

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

4üĔÃääċ

×üł¼ĔÚóĔ–Ĭĩ¼ĥ – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔÃÛċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

ł¼Ĕ 4üĔà z Ŀċ

×Ĕ–üpSĬ²ĩĔpĸĬĔ ¨Ã4¦ z Öē•ûoRĬ±ĨēoķĬ » ē § Ľoûċ ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ Ĕp²× Jłċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼ÊH ć¨Sà Sp¨ 4üĔà ×üł² Sp¨ Sp×ÃćłĔÃH Üł¼óJ 4üĔà Ûċ 4üĔÃääċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼Ê – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔà Ûċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ Ĕp²× Jłċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú¨Ã4¦Ûċ

×üł¼ĔÚ óĔ–Ĭĩ¼ĥH ć¨Sà Sp¨ 4üĔà ×üł² Sp¨ Sp×ÃćłĔÃH Üł¼óJ 4üĔà Ûċ 4üĔÃääċ

×üł¼ĔÚ óĔ–Ĭĩ¼ĥ – Sp×ÃćłĔĔà ćĩ¨ 4üĔà ž ć¨SÃH ÜS¼óJ 4üĔà Ûċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú¨Ã4¦Ûċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

×Ĕ–üpSĬ²ĩĔpĸĬĔ ²ĩĔpĸ z Öē•ûoRĬ±ĨēoķĬ » ē § Ľoûċ 4–ü ĩpü!ÊĿ"ċ

ł¼Ĕ ×üüĔà z Ŀċ

ıÃłS  üpSpüÚıÃłS üˆÛ

ĵ–ł¨pÚ ×üüĔà zz Ŀ Ûċ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú²ĩĔpĸÛċ

×üł¼ĔÚó•à ¨pĔĔà óÜćó¼óJ ĩpüÛċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú²ĩĔpĸÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  ĵüłĔpüÚıÃłS üˆÛ

×Ĕ–üpSĬ²ĩĔpĸĬ¨Ã4¦Ú²ĩĔpĸÛċ

ć×üł¼ĔÚĩpü J óĔ–üpS žÜłóJ Úł¼ĔÛ×Ĕ–üpSĬćp¨ÚÛÛċ

(18)

Esercizio 15

Trova l’errore (2)

16

×üüĔà z Êċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú²ĩĔpĸÛċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ĬüÊ J Ĕ–Ĭüĥ J Ĕ–ĬüĘċ

×Ĕ–üpSĬĔ Ĕ–ĬĵÊċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĬüÊ J »Ĩ§§ J üpSpü J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–Ĭüĥ J »Ĩ§§ J üpSpü J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĬüĘ J »Ĩ§§ J üpSpü J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĬĵÊ J »Ĩ§§ J ĵüłĔpü J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĬüÊ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–Ĭüĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĬüĘ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĬĵÊ J »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

4–ü 4üĔĔpüp z öĸĿöċ ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

×üł¼ĔÚó§pĔĔà Ü4¼óJ 4üĔĔpüpÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ łċ

4üĔĔpüp z Úü¼SÚÛܾĘÛäĘĘċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

Áł¼4¨ĩSp «ćp²זÃüpݖ

4–ü 4üĔĔpüp z öĸĿöċ ćp²ĬĔ ćp²ÃüÃċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ łċ

ćp²ĬĵłĔÚćp²ÃüÃÛċ

×üł¼ĔÚó§pĔĔà Ü4¼óJ 4üĔĔpüpÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ łċ

4üĔĔpüp z Úü¼SÚÛܾĘÛäĘĘċ ćp²Ĭ×ÃćĔÚćp²ÃüÃÛċ

üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ ćü¼SÚ Ĕł²pÚ »Ĩ§§ Û Ûċ

ćp²Ĭł¼łĔÚćp²Ãüà J ĿJ ĿÛċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

(19)

Esercizio 15

Trova l’errore (2)

16

×üüĔà z Êċ

×Ĕ–üpSĬ²ĩĔpĸĬĩ¼¨Ã4¦Ú²ĩĔpĸÛċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ĬüÊ J Ĕ–Ĭüĥ J Ĕ–ĬüĘċ

×Ĕ–üpSĬĔ Ĕ–ĬĵÊċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĬüÊ J »Ĩ§§ J üpSpü J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–Ĭüĥ J »Ĩ§§ J üpSpü J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĬüĘ J »Ĩ§§ J üpSpü J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĬĵÊ J »Ĩ§§ J ĵüłĔpü J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĬüÊ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–Ĭüĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĬüĘ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĬĵÊ J »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

4–ü 4üĔĔpüp z öĸĿöċ ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

×üł¼ĔÚó§pĔĔà Ü4¼óJ 4üĔĔpüpÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ łċ

4üĔĔpüp z Úü¼SÚÛܾĘÛäĘĘċ üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

Áł¼4¨ĩSp «ćp²זÃüpݖ

4–ü 4üĔĔpüp z öĸĿöċ ćp²ĬĔ ćp²ÃüÃċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ łċ

ćp²ĬĵłĔÚćp²ÃüÃÛċ

×üł¼ĔÚó§pĔĔà Ü4¼óJ 4üĔĔpüpÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ łċ

4üĔĔpüp z Úü¼SÚÛܾĘÛäĘĘċ ćp²Ĭ×ÃćĔÚćp²ÃüÃÛċ

üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ ćü¼SÚ Ĕł²pÚ »Ĩ§§ Û Ûċ

ćp²Ĭł¼łĔÚćp²Ãüà J ĿJ ĿÛċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Il  problema  sta  nel  fa1o  che  th_fun2  

dovrebbe  essere  eseguita  sempre  prima   di  th_fun1  in  modo  tale  da  leggere  un   cara1ere  valido  dal  buffer.  

!

COME  SI  RISOLVE?

(20)

Esercizio 15

Trova l’errore (2)

17

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

Áł¼4¨ĩSp «ćp²זÃüpݖ

4–ü 4üĔĔpüp z öĸĿöċ ćp²ĬĔ ćp²ÃüÃċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ łċ

ćp²ĬĵłĔÚćp²ÃüÃÛċ

×üł¼ĔÚó§pĔĔà Ü4¼óJ 4üĔĔpüpÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ łċ

4üĔĔpüp z Úü¼SÚÛܾĘÛäĘĘċ ćp²Ĭ×ÃćĔÚćp²ÃüÃÛċ

üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ ćü¼SÚ Ĕł²pÚ »Ĩ§§ Û Ûċ ćp²Ĭł¼łĔÚćp²Ãüà J ĿJ ĿÛċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

(21)

Esercizio 15

Trova l’errore (2)

17

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

Áł¼4¨ĩSp «ćĔS¨łݖ

Áł¼4¨ĩSp «ćĔSłÃݖ

Áł¼4¨ĩSp «×Ĕ–üpSݖ

Áł¼4¨ĩSp «ćp²זÃüpݖ

4–ü 4üĔĔpüp z öĸĿöċ ćp²ĬĔ ćp²ÃüÃċ

ıÃłS  Ĕ–Ĭĩ¼ÊÚıÃłS üˆÛ

ł¼Ĕ łċ

ćp²ĬĵłĔÚćp²ÃüÃÛċ

×üł¼ĔÚó§pĔĔà Ü4¼óJ 4üĔĔpüpÛċ üpĔĩü¼ »Ĩ§§ċ

ıÃłS  Ĕ–Ĭĩ¼ĥÚıÃłS üˆÛ

ł¼Ĕ łċ

4üĔĔpüp z Úü¼SÚÛܾĘÛäĘĘċ ćp²Ĭ×ÃćĔÚćp²ÃüÃÛċ

üpĔĩü¼ »Ĩ§§ċ

ł¼Ĕ ²ł¼Úł¼Ĕ üˆ4 J 4–ü  üˆı!"Û

×Ĕ–üpSĬĔ Ĕ–ÊJ Ĕ–ĥċ ćü¼SÚ Ĕł²pÚ »Ĩ§§ Û Ûċ ćp²Ĭł¼łĔÚćp²Ãüà J ĿJ ĿÛċ

×Ĕ–üpSĬ4üpĔpÚĔ–ÊJ »Ĩ§§ J Ĕ–Ĭĩ¼Ê J »Ĩ§§Ûċ

×Ĕ–üpSĬ4üpĔpÚĔ–ĥJ »Ĩ§§ J Ĕ–Ĭĩ¼ĥ J »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ÊJ »Ĩ§§Ûċ

×Ĕ–üpSĬńÃł¼ÚĔ–ĥJ »Ĩ§§Ûċ üpĔĩü¼ Ŀċ

SI  UTILIZZA NO  I  

SEMAFOR I!

(22)

Esercizio 16

Dal barbiere

18

Negozio  del  barbiere:  il  barbiere  dorme  fino  a  che  non  ci  sono   clienti:  all’arrivo  di  un  cliente  esso  può:    

!

1. svegliare  il  barbiere  (nel  caso  stesse  dormendo)  

2. sedersi  ed  aspe1are  che  il  barbiere  abbia  finito  con  il  cliente   che  sta  radendo  al  momento  

3. se  tu1e  le  sedie  della  sala  di  a1esa  sono  occupate,  il  cliente   se  ne  va  

!

Implementare  un  programma  che  simula  il  comportamento   appena  descri1o.  

!

Si  fa  l’ipotesi  che  la  particolare  implementazione  dei  semafori   sblocchi  i  thread  secondo  l’ordine  di  chiamata  della  sem_wait.

POLTRONA ! BARBIERE

SEDIA 1

SEDIA 2

SEDIA 3

SEDIA 4

C2 C3 C4 C5 C1

B

STANZA

(23)

Esercizio 16

Dal barbiere

19 Ci  è  utile  avere  due  tipi  di  notifiche:  

!

1. Quando  un  cliente  arriva  

2. Quando  il  barbiere  è  disponibile  

!

Inoltre  ci  serve  avere:  

!

1. Sapere  quante  sedie  abbiamo  

2. Sapere  il  numero  di  clienti  nella  nostra  simulazione   3. Sapere  quante  sedie  sono  disponibili  

!

Infine,  dobbiamo  tener  presente  che  la  stanza  è  una  risorsa   condivisa  tra  più  a1ori.

POLTRONA ! BARBIERE

SEDIA 1

SEDIA 2

SEDIA 3

SEDIA 4

C2 C3 C4 C5 C1

B

STANZA

Riferimenti

Documenti correlati

non essendoci una categoria prevalente nella procedura di gara (CPV: 85300000-2 Servizi di assistenza sociale e servizi affini), premessa la capacità riconosciuta

 ogni volta che un processo richieda una risorsa già occupata, il richiedente deve attendere che la risorsa si liberi prima di. impossessarsene (coda FIFO

Il semaforo barbers viene utilizzato per occupare il barbiere e addormentare un cliente se il barbiere è già occupato a servire altri. Il semaforo mutex viene utilizzato

Un oggetto di massa 1,0 kg viene lanciato alla velocità di 2,0 m/s dal punto più basso di un piano inclinato con angolo di inclinazione 30°.. L’oggetto si fermerà a una

Quindi, alla fine dell’esecuzione del primo thread il suo valore sar`a 3, alla fine dell’esecuzione del secondo thread sar`a 7 e alla fine dell’esecuzione del terzo thread sar`a

Chiunque fosse trovato in possesso di documentazione relativa al corso – anche se non strettamente attinente alle domande proposte – vedrà annullata la propria prova.. Non è

 Quanto vale l’area di base della stiva.  Esiste un legame tra la tonnellata di stazza e la tonnellata

Nella tabella seguente sono riportati i valori dei pesi attaccati e i corrispondenti allungamenti della molla. Peso applicato