Esercizi di mutua esclusione e
sincronizzazione (2)
Alessandro A. Nacci
[email protected]
ACSO
2014/2014
1
2
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(-/
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
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
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"
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
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"
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"
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
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)
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
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
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üĔà Ûċ
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?
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¨ÚÛÛċ
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¨ÚÛÛċ
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Ĕĩü¼ Ŀċ
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?
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Ĕĩü¼ Ŀċ
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!
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
Esercizio 16
Dal barbiere
19 Ci è utile avere due tipi di notifiche:
!
1. Quando un cliente arriva2. Quando il barbiere è disponibile
!
Inoltre ci serve avere:!
1. Sapere quante sedie abbiamo2. 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