filosofos
-
Upload
elias-garcia-marino -
Category
Documents
-
view
215 -
download
0
description
Transcript of filosofos
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 1/21
Filosofos Cenando
Juan Quintela – Javier París
{quintela,javier.paris}@udc.es
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 2/21
Descripcin
● ! Filosofos sentados en una "esa circular paracenar.
● #ntre cada dos filsofos $a% un cu&ierto '!
cu&iertos en total(.● )n filosofo puede estar pensando, o co"iendo.
● Para co"er necesita usar los dos cu&iertos que
tiene a i*quierda % derec$a.● +a solucin de&e intentar evitar que nin-n
filosofo sufra inanicin.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 3/21
Descripcin
/
0
1
2
34
5
6
7
3
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 4/21
3er 8ntento9 )n "ute: por tenedor
;a"os a &loquear cada tenedor con un "ute:.
! es el n-"ero de filsofos<tenedores.
pt$read="ute:=t tenedor>!?
AD#F8!# +#FB'i( 'i(
AD#F8!# 8EB'i( '''i(3( G !(
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 5/21
3er 8ntento9 )n "ute: por tenedor
void filosofo'int nu"( {
int left H +#FB'nu"(
int ri$t H 8EB'nu"(
I$ile'3( {
t$in'(pt$read="ute:=loc'tenedor>left?(
pt$read="ute:=loc'tenedor>ri$t?(
eat'(
pt$read="ute:=unloc'tenedor>ri$t?(
pt$read="ute:=unloc'tenedor>left?(
}
}
● KQue pasa si cada filosofo coe el cu&ierto de su i*quierdaL
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 6/21
3er 8ntento9 )n "ute: por tenedor
/
0
1
2
34
5
6
7
3
Cuando intenten coer el de la derec$a lo van a encontrar ocupado HM inter&loqueo
●
KQue pasa si cada filosofo coe el cu&ierto de su i*quierdaL
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 7/21
3er 8ntento9 )n "ute: por tenedor
● Posi&le solucin9
● Cada filsofo coe el cu&ierto de la i*quierda, % sino consiue el de la derec$a al ca&o de un periodo
de tie"po suelta el de la i*quierda HM +a esperatiene que ser distinta para cada filsofo.
● !o $a% inter&loqueos, porque evita"os $oldNIait
● 8"plica usar tr%loc o ti"edloc.
● Funciona &ien con un n-"ero rande de filsofos.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 8/21
3er 8ntento9 )n "ute: por tenedor
int left H +#FB'nu"(
int ri$t H 8EB'nu"(
int success H 4
I$ile'3( {
t$in'(
do {
pt$read="ute:=loc'tenedor>left?( << Oloquea el "ute: del tenedor i*quierdo
if'pt$read="ute:=tr%loc'tenedor>ri$t?(( << 8ntenta &loquear el "ute: del tenedor derec$o con tr%loc
successH3
else {
pt$read="ute:=unloc'tenedor>left?(
usleep'rand'( G R=S8B(
}} I$ile'Tsuccess(
eat'(
pt$read="ute:=unloc'tenedor>ri$t?( << Uuelta el "ute: del tenedor derec$o
pt$read="ute:=unloc'tenedor>left?( << Uuelta el "ute: del tenedor i*quierdo
}
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 9/21
V 8ntento9 )n "ute: para la "esa
● Ue usa un -nico "ute: para &loquear todos loscu&iertos con un "ute:.
● Puede $a&er starvation, especial"ente si la "esaes rande.
● +i"ita la concurrencia porque solo un filsofopuede estar coiendo cu&iertos, aunque puede$a&er varios co"iendo al "is"o tie"po.
●
Funciona &ien con pocos filsofos.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 10/21
V 8ntento9 )n "ute: para la "esa
● ;a"os a usar una condicin por filsofo para que espere si nopuede coer los cu&iertos.
● #n ve* de uardar quien tiene cada cu&ierto uarda"os elestado de cada filsofo 'E)!W, #B8!, BE8!X8!(.
Adefine ! 1Adefine 8EB':( ''':(3( G !(
Adefine +#FB ':( ''':(HH4( !9'':(Y3(((
pt$read=cond=t Iaitin>!?
pt$read="ute:=t "ute:
int state>!?
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 11/21
V 8ntento9 )n "ute: para la "esa
filosofo'int i( {
I$ile'3( {
t$in'(
picup'i(eat'(
put=doIn'i(
}
}
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 12/21
V 8ntento9 )n "ute: para la "esa
void picup'int i( {
pt$read="ute:=loc'N"ute:(
state>i? H E)!W
I$ile 'state>+#FB'i(? HH #B8! ZZ state>8EB'i( HH#B8!(
pt$read=cond=Iait'NIaitin>i?, N"ute:(
state>i? H #B8!
pt$read="ute:=unloc'N"ute:(
}
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 13/21
V 8ntento9 )n "ute: para la "esa
void put=doIn'int i( {
pt$read="ute:=loc'N"ute:(
state>i?HBE8!X8!
if'state>+#FB'i(? HH E)!W(pt$read=cond=sinal'NIaitin>+#FB'i(?(
if'state>8EB'i(? HH E)!W(
pt$read=cond=sinal'NIaitin>8EB'i(?(
pt$read="ute:=unloc'N"ute:(
}
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 14/21
Pro&le"as
/
0
1
2
34
5
6
7
3
#l 2 tiene $a"&re, pero no puede co"er porque el 1 le ocupa el cu&iertoderec$o.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 15/21
Pro&le"as
/
0
1
2
34
5
6
7
3
#l 7 tiene $a"&re, % los dos cu&iertos que quiere usar est[n li&res HM pasa a co"er
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 16/21
Pro&le"as
/
0
1
2
34
5
6
7
3
#l 1 ter"ina % despierta al 2, pero el 2 vuelve a dor"ir porque su cu&ierto i*quierdoest[ ocupado por el 7. #sto puede ocurrir indefinida"ente, por lo que el 2 tendríainanicin.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 17/21
Pro&le"as
● +a solucin cl[sica no tiene inter&loqueos, peropuede $a&er inanicin9
● Ui un filosofo tiene vecinos que se alternan
co"iendo '% al "enos uno sie"pre est[ co"iendo(no conseuir[ co"er nunca.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 18/21
Con prevencin de inanicin
● Ui un filosofo espera "[s de un cierto tie"po leda"os prioridad HM "odifica"os la funcin depicup
●
Ea% varias for"as de $acerlo9● uardar la $ora en el "o"ento en que cada
filosofo consiue co"er HM así sa&e"os cuantotie"po $a pasado desde la -lti"a ve* que co"i.
● Cada cierto tie"po "arca"os a los filsofos queest\n E)!W co"o ;#!])U, % les da"osprioridad so&re los E)!W.
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 19/21
Prevencin inanicin9 por tie"po
void picup'int i( {
pt$read="ute:=loc'N"ute:(
state>i? H E)!W
I$ile 'Tcan=i=eat'i((pt$read=cond=Iait'NIaitin>i?, N"ute:(
last=ate>i? H ti"e'4(
state>i? H #B8!
pt$read="ute:=unloc'N"ute:(
}
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 20/21
Prevencin inanicin
int can=i=eat'int i( {
if'state>+#FB'i(? HH #B8! ZZ state>8EB'i( HH#B8!( return 4
if'ti"e'4( – last=ate>i? M R=S8B( return 3if'state>+#FB'i(? HH E)!W NN 'ti"e'4( –last=ate>+#FB'i(? M R=S8B( return 4
if'state>8EB'i(? HH E)!W NN 'ti"e'4( –
last=ate>8EB'i(? M R=S8B( return 4return 3
}
7/17/2019 filosofos
http://slidepdf.com/reader/full/filosofos-568e2c6e2ce6f 21/21
Co"paracin Uoluciones
Uolucion ;entajas Pro&le"as
3 ute: por tenedorUolo se &loquea lo necesario
Funciona &ien con "uc$os filosofosEa% inter&loqueo
3 ute: por tenedor tr%loc
Uolo se &loquea lo necesarioFunciona &ien con "uc$os filsofos!o $a% inter&loqueo
Puede $a&er inanicin
#l tie"po de espera aleatoriointroduce retardos.
Ue $ace espera activa
3 ute: lo&al3condicin por filsofo
!o $a% retardos en el acceso.+a espera es pasiva.
Puede $a&er inanicinCon "uc$os filsofos el "ute:
-nico li"ita la concurrencia
3 ute: lo&al 3condicin por filsofo
li"itacin espera
#spera pasiva.!o $a% inanicin.
!o $a% retardos en el acceso
Con "uc$os filsofos el "ute:-nico li"ita la concurrencia.