Вы находитесь на странице: 1из 22

Problemes Sincronitzacio Coordinacio entre Threads

Software Distribu t - T5 - Threads-II


Eloi Puertas i Prats
Universitat de Barcelona ` Grau en Enginyeria Informatica

19 de marc de 2013

1 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Problemes dels Threads


Problemes de seguretat:
Ens hem dassegurar que no passi res dolent degut a lacces ` simultani de diversos threads a zones de memoria. mutua: simultani a Regions dexclussio Solucio: evitar acces instruccions que comprometin la integritat de les dades.

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

Problemes Sincronitzacio Coordinacio entre Threads

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

store value in register to counter


store value in register to counter

This execution results in the value 2 in the counter

This execution results in the value 1 in the counter

instruction executed in concurrent process or thread 1 instruction executed in concurrent process or thread 2

3 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

de carrera + comptador compartit = problema de Condicio seguretat


Quan dos threads independents accedeixen i modifquen una mateixa ha de ser sincronitzada. dada, com un contador, la modicacio

count++ // Thread 1 count++ // Thread 2 out.println // Thread 1 out.println // Thread 2

4 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Exemple Contador No sincronitzat

CounterNoSincr.java

5 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

expl Sincronitzacio cita i impl cita

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

expl Sincronitzacio cita i impl cita


// Explicit p u b l i c c l a s s Main { Persona p ; p u b l i c v o i d method ( ) { / / c o d i no t e l o c k synchronized ( p ) { // c o d i t e e l l o c k de l o b j e c t e p

} } }
// 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

Problemes Sincronitzacio Coordinacio entre Threads

Exemple Contador sincronitzat

CounterSincr.java

9 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Sincronitzant el contador. Alternativa 1

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Sincronitzant el contador. Alternativa 2

P r i n t W r i t e r out = res . g e t W r i t e r ( ) ; s yn c h ro n iz e d ( t h i s ) { 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 . ) ;

11 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Sincronitzant el contador. Alternativa 3

P r i n t W r i t e r out = res . g e t W r i t e r ( ) ; int local count ; s yn c h ro n iz e d ( t h i s ) { l o c a l c o u n t = ++ 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 + l o c a l c o u n t + times . ) ;

12 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Deadlock (problema de bloqueig)

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Exemple Deadlock

DeadLock.java

14 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

Evitar els Deadlock


c l a s s T1 extends Thread { v o i d run ( ) { s yn c hr o n iz e d ( o b j 1 ) { s yn c hr o n i z e d ( o b j 2 ) { / / Hacer a l g o con l o s dos

} } } }
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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

entre Threads Coordinacio

Monitors en Java, mecanisme wait/notify Esperes entre processos en Java. Thread.join(); ` Utilitats de concurrencia de JAVA

17 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

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

Problemes Sincronitzacio Coordinacio entre Threads

Mecanisme wait/notify

Exemples utilitat: cues bloquejants. Quan estan buides o plenes sesperen. protocols productors-consumidors. desperes actives. supressio

19 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

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

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Problemes Sincronitzacio Coordinacio entre Threads

` Utilitats de concurrencia de JAVA

Mecanismes de sincronitzacio. Coleccions concurrents. i execucio de tasques. Planicacio API java.util.concurrent

22 / 22

Eloi Puertas i Prats

Software Distribu t - T5 - Threads-II

Вам также может понравиться