Академический Документы
Профессиональный Документы
Культура Документы
19 de marc de 2013
1 / 22
Problemas desperes: processos es bloquegen mutuament Deadlock: Dos o mes per a poder realitzar els seus objetius. Starvation: Degut a la forma (injusta) dassignar els recursos, no pot realitzar els seus objetius. algun proces capac Livelock: Varis processos no son os de realitzar els seus objetius, tot i que es mantenen actius ` realitzant comput. ` Problemes deciencia.
` Hem dassegurar que es facin el maxim comput simultani possilbe.
2 / 22 Eloi Puertas i Prats Software Distribu t - T5 - Threads-II
de carrera Condicio
time fetch value in counter and load into a register increment value in register store value in register to counter fetch value in counter and load into a register
increment value in register store value in register to counter
fetch value in counter and load into a register fetch value in counter and load into a register increment value in register
increment value in register
instruction executed in concurrent process or thread 1 instruction executed in concurrent process or thread 2
3 / 22
4 / 22
CounterNoSincr.java
5 / 22
Sincronitzacio
Diferents threads poden correr sobre els mateixos objectes. associat un lock. Cada objecte Java te El lock pot ser reclamat per qualsevol dels threads que corren en ` la maquina virtual. el lock i un altre thread t2 el reclama, t2 es Si un thread t1 te bloqueja esperant ns que t1 retorni el lock.
6 / 22
Hi ha dues formes daconseguir el lock dun objecte: Expl citament Denint un bloc de codi sincronitzat: ` Impl citament Cada vegada que invoquem un metode de lobjecte que hagi estat denit com synchronized, ens veurem obligats a obtenir el lock daquest mateix objecte abans de lexecucio:
7 / 22
} } }
// Implicit p u b l i c c l a s s Persona { s y n c h r o n i z e d v o i d metode ( ) { / / c o d i t e e l l o c k de l o b j e c t e t h i s
} }
8 / 22 Eloi Puertas i Prats Software Distribu t - T5 - Threads-II
CounterSincr.java
9 / 22
p u b l i c sy n c h r o n i z e d v o i d doGet ( H t t p S e r v l e t R e q u e s t req , HttpServletResponse r e s ) { P r i n t W r i t e r out = res . g e t W r i t e r ( ) ; count ++; o u t . p r i n t l n ( Since l o a d i n g , t h i s s e r v l e t has been accessed + count + t i m e s . ) ;
10 / 22
11 / 22
}
o u t . p r i n t l n ( Since l o a d i n g , t h i s s e r v l e t has been accessed + l o c a l c o u n t + times . ) ;
12 / 22
threads esta ` en Deadlock quan tots els threads en Dos o mes pot aquest conjunt estan esperant un esdeveniment que nomes ser causat per un altre thread en el conjunt. concernents amb Els esdeveniments als quals ens referim son i alliberament de recursos principalment. lassignacio ordenar els recursos Una forma senzilla devitar Deadlocks es que desitgem obtenir de forma que tots els threads es sol.liciten en el mateix ordre.
13 / 22
Exemple Deadlock
DeadLock.java
14 / 22
} } } }
c l a s s T2 extends Thread { v o i d run ( ) { s yn c h ro n iz e d ( o b j 2 ) { s yn c hr o n i z e d ( o b j 1 ) { / / Hacer a l g o con l o s dos
} } }
c l a s s Main { v o i d main ( S t r i n g [ ] ) { S t r i n g obj1 , o b j 2 ; T1 t 1 ; T2 t 2 ; t1 . s t a r t ( ) ; t2 . s t a r t ( )
} }
15 / 22
de Threads Finalitzacio
` Els threads shan dacabar de forma natural, retornant del metode run. Un thread no pot nalitzar un altre thread. pero ` es el thread que sesta ` Pot enviar-li una senyal dinterrupcio, executant qui ha datendre a aquesta senyal i fer-li cas.
16 / 22
Monitors en Java, mecanisme wait/notify Esperes entre processos en Java. Thread.join(); ` Utilitats de concurrencia de JAVA
17 / 22
Mecanisme wait/notify
Java ens ofereix un mecanisme desperes i noticacions per multithread. facilitar la programacio associada una llista de noticacio, en la qual Cada objecte te poden col.locar els threads. Si un thread guanya el lock dun objecte, pot decidir en qualsevol daquest moment quedar-se esperant a la llista de noticacio ` en estat objecte. A partir daquest moment el thread es trobara ` CPU ns que un altre thread li notiqui que waiting i no ocupara ha de despertar-se. de wait Es necessita tenir el lock de lobjecte per fer una operacio o notify, per poder evitar situacions de carrera entre threads que ` es responsabilitat nostre garantir que les fan wait i notify. Pero a dir que condicions que van propociar lespera es mantenen. Es abans de lespera. no ocorre la noticacio
18 / 22 Eloi Puertas i Prats Software Distribu t - T5 - Threads-II
Mecanisme wait/notify
Exemples utilitat: cues bloquejants. Quan estan buides o plenes sesperen. protocols productors-consumidors. desperes actives. supressio
19 / 22
Wait / Notify
p u b l i c f i n a l v o i d w a i t ( ) throws I n t e r r u p t e d E x c e p t i o n ; / / B l o q u e j a e l t h r e a d a c t u a l i l e n v i a a l a l l i s t a d espera de l o b j e c t e sobre e l que es f a . p u b l i c f i n a l v o i d w a i t ( l o n g t i m e o u t ) throws I n t e r r u p t e d E x c e p t i o n ; / / B l o q u e j a e l t h r e a d a c t u a l i l e n v i a a l a l l i s t a d espera de l o b j e c t e sobre e l que es f a / / amb un t i m e o u t per s i ningu e l d e s p e r t a .
public f i n a l void n o t i f y ( ) / / Desperta un d e l s t h r e a d s ( s e l e c c i o n a t a l e a t o r i a m e n t ) que esperen a l a l l i s t a de n o t i f i c a c i o de l o b j e c public f i n a l void n o t i f y A l l ( ) / / Desperta a t o t s e l s t h r e a d s que esperen a l a l l i s t a de n o t i f i c a c i o de l o b j e c t e .
20 / 22
Join de Threads
p u b l i c f i n a l v o i d j o i n ( ) throws I n t e r r u p t e d E x c e p t i o n / / B l o q u e j a e l t h r e a d a c t u a l f i n s que e l t h r e a d sobre e l q u a l s i n v o c a e l metode , / / h a g i acabat ( o e l t h r e a d a c t u a l r e b i un i n t e r r u p t ( ) ) . / / Es creen i es posen en marxa uns quants f i l l s Thread h i j o s [ NUM HIJOS ] = c r e a H i j o s ( ) ; / / E l pare espera que t o t s e l s f i l l s acabin per c o n t i n u a r f o r ( i n t i = 0 ; i < NUM HIJOS ; i ++) { hijos [ i ] . join ( ) ;
21 / 22
22 / 22