Você está na página 1de 126

Programao

Concorrente com Java


Elenilson Vieira
Embaixador de Campus da Sun
Universidade Federal da Paraba
blogs.sun.com/elenilsonvieira
elenilson.vieira@sun.com
1

Agenda Parte 1 (Introduo)


1 Introduo
2 Motivao
3 Arquitetura de Sistemas
4 Tipos de Concorrncia
5 Programas e Processos
6 Problemas com Concorrncia

Agenda Parte 2 (Threads)


1 Caractersticas
2 Threads em Java
3 Classe Threads
4 Interface Runnable
5 Programas e Processos
6 Threads x Runnable
7 Terminando Threads
8 Prioridades
9 Gerenciamento de Threads
10 Ciclo de Vida

Agenda Parte 3 (Excluso Mtua)


1 Seo Crtica
2 Excluso Mtua
3 Execuo Concorrente
4 Implementando Excluso Mtua
5 Variveis booleana compartilhada

Agenda Parte 4 (Sincronizao)


1 Introduo
2 Semforos
- Tipos de Semforo
- Excluso Mtua com Semforo
- Semforo em Java
- Problema Produtor-Consumidor
- Sincronizao com Semforo
3 Monitores
- Introduo
- Monitores x Semforos
- Monitores em Java
- Mtodos Sincronizados
- Trechos de Cdigo Sincronizado
- Perigo de Deadlock
- Problema Produtor-Consumidor

Perguntas?

SunC onfidential:InternalO nly

Comeando a brincadeira...

Footnote position, 12 pts.


SunC onfidential:InternalO nly

Introduo

8
7

Agenda Parte 1 (Introduo)


1 Introduo
2 Motivao
3 Arquitetura de Sistemas
4 Tipos de Concorrncia
5 Programas e Processos
6 Problemas com Concorrncia

9
8

Program aSequencial
> N om aisqueum aoperaoaconteceem um

dadom om ento
> decorrentedaform acom oocontrole

passadoem seqnciaentrecom andos


> C adacom andodeveserconcludoantesdo

prxim ocom andoiniciar

Program aC oncorrente
> hbilarealizarm aisqueum aoperaoem

um dadom om ento
Footnote position, 12 pts.
SunC onfidential:InternalO nly

10

C oncorrncia
> C oncorrncianoum atarefatrivial
> Tornaaprogram aom aisdifcil
> D ificultaarealizaodostestes
> R eduzaefetividadedostestes
Program asseqenciaissorazoavelm enteentendveis
C om plexidadeproporcionalaotam anho
Program asconcorrentesem geralno
com partilham taiscaractersticas
SunC onfidential:InternalO nly

11

Motivao
Escreverprogram ascorretosdifcil

Escreverprogram asconcorrentescorretos
m uitom aisdifcil

Porquedesenvolverprogram asconcorrentes?

SunC onfidential:InternalO nly

12

Footnote position, 12 pts.


SunC onfidential:InternalO nly

13

Motivao
Buscadem aiordesem penho
R epresentaodeaspectosconcorrentes
dom undoreal
D esenvolvim entodearquiteturasde
com putadoresconcorrentes

SunC onfidential:InternalO nly

14

Arquiteturas de Sistemas
Sistem aM ultitarefa
> Perm itevriosprocessoscom partilharem o

processador
> C om partilham entobaseadonadivisodotem po
> C oncorrnciadeprocessam entoeentrada/sada
R

SO

e
g

e
g

Processo
1

R
e
g

Processo
2

R
e
g

Processo
3

R
e
g

Processo
4
1

R
e

C PU

2 SunCgonfidential:InternalO nly

15

Arquiteturas de Sistemas
Sistem aM ultiprocessador
> Alocaprocessosnosvriosprocessadores
> Tam bm aconteceocom partilham entode

processadores
M em ria
G lobal

C PU

C PU

C PU

M em ria
Local

M em ria
Local

M em ria
Local

SunC onfidential:InternalO nly

16

Arquiteturas de Sistemas
Sistem asD istribudos
> C onsistedevrioscom putadoresqueoperam

independentem entem asquesecom unicam


> Provm aiordesem penhoagregadoeincrem entaa

confiabilidade
C PU
C PU
M em ria
Local

M em ria
Local

C PU
M em ria
Local
SunC onfident
ial:InternalO nly

C PU
M em ria
Local

17

Agenda Parte 1 (Introduo)


1 Introduo
2 Motivao
3 Arquitetura de Sistemas
4 Tipos de Concorrncia
5 Programas e Processos
6 Problemas com Concorrncia

18
17

Tipos de Concorrncia
C oncorrnciaFsica(paralelism o)
> C adaunidadeexecutadaem um

processadordedicado

C oncorrnciaLgica
> Processadorchaveadadeum aunidade

paraoutra
> C ausaaim pressoqueasunidades

executam sim ultaneam ente


SunC onfidential:InternalO nly

19

Programas e Processos
ProcessoSequencial
> um conjuntototalm enteordenadodepassos
> D adoquaisquerdoispassossem pre

possvelindicarqualoprim eiro
> C adapassosendoum am udanadeestado

em algum com ponentedosistem ade


com putao

SunC onfidential:InternalO nly

20

Programas e Processos
Program aSequencial
> Especificaaspossveism udanasdeestado

deum processoseqencial
> Estruturadecontroledoprogram adeterm inaa

ordem deexecuo
> Aessoordenadaspelasregrasde

seqenciaodalinguagem deprogram ao
adotada
D efinecom oocontrolepassadodecom andoa
com ando
SunC onfidential:InternalO nly

21

Programas e Processos
Program aC oncorrente
> Especificaaspossveism udanasdeestado

dedoisoum aisprocessosseqenciais
> N enhum aordem im plicitam entedefinida

entreasm udanasdeestadosdosprocessos
> Processossoditosexecutar

concorrentem ente
> Processospodem atm esm oexecutar

sim ultaneam ente


SunC onfidential:InternalO nly

22

Problemas com Concorrncia


D eterm inism oxN oD eterm inism o
> Program asseqnciascorretosso

determ insticos
Seguem um aseqnciadepassosquepodeser
com pletam entereproduzidaem m ltiplas
execuescom osm esm osdadosdeentrada

> D eterm inism otornapossvelverificarevalidar

program asviatestes

SunC onfidential:InternalO nly

23

Problemas com Concorrncia


D eterm inism oxN oD eterm inism o
> U m program aconcorrentenodeterm instico

U nidadesdeexecuoprosseguem em um aordem no
predefinida
> N opossvelpredizeraseqnciadepassosque

realizadaouoresultadofinal
> M ltiplasexecuesdoprogram aconcorrentecom os

m esm osdadosdeentradapodem gerarresultados


diferentes
> Sequnciadepassoseresultadofinaldependem do

escalonam entointerno
SunC onfidential:InternalO nly

24

Problemas com Concorrncia


D eterm inism oxN oD eterm inism o
> U m program aconcorrenteincorreto...

Podeterocom portam entoesperadoagrandem aioria


dasvezes
Podedeform ainterm itenteeirreprodutveldesviarse
docom portam entonorm al
> Errosdeprogram aoconcorrentesom uitodifceisde

diagnosticar
> N odeterm inism oum pontochavedaprogram ao

concorrente
> Tornabastantedifcilaprogram ao
SunC onfidential:InternalO nly

25

Problemas com Concorrncia


D ependnciadeVelocidade
> U m program aseqencialindependentedavelocidade

C orretudenodependedavelocidadedeexecuo
> R esultadodeum program aconcorrentedependente

davelocidade
D ependedavelocidaderelativacom queosprocessos
seqenciaisconstituintessoexecutados
Pequenasflutuaesrandm icasnavelocidadedo
processadoredispositivosdeentrada/sadapodem
levaraonodeterm inism o
SunC onfidential:InternalO nly

26

Problemas com Concorrncia


D ependnciadeVelocidade
> Q uandoosresultadossodependentesda

velocidadedizsequeexisteum acondiode
corrida(racecondition)
R esultadospodem serim previsveis
P: s := ABCDE
Q: s := FGHIJ
s = ABCDE

s = FGHIJ
SunC onfidential:InternalO nly

s = ABHIE
27

Problemas com Concorrncia


D ependnciadeVelocidade
> R equeraadoodoconceitodeatom icidade
U m avarivelatm icaquandoinspecionadae
atualizadasem qualquerinterrupono
processam ento
> Atom icidadenoresolveoproblem ageral
P: i := i + 1
Q: i := 2 * i
i = 2

LD reg, i
INC reg
ST i, reg

i = 1

LD reg, i
ML reg, 2
ST i, reg

i = 0
SunC onfidential:InternalO nly

28

Problemas com Concorrncia


D eadlock
> D oisoum aisprocessosencontram seim possibilitados

defazerqualquerprogressonoprocessam ento
> G eradoem funodasm tuasdem andas

incom patveisporrecursos
> Podeocorrerseesom enteseasseguintescondies

sosatisfeitas
ExclusoM tua
AquisioIncrem ental
N oPreem po
EsperaC ircular
SunC onfidential:InternalO nly

29

Problemas com Concorrncia


D eadlock
> ExclusoM tua
Processospossuem acessoexclusivoaosrecursos
P1

P2

Enquantoum processolerdadosdoteclado,
nofazsentidoperm itiroutroprocessousaro
tecladoaom esm otem po
SunC onfidential:InternalO nly

30

Problemas com Concorrncia


D eadlock
> AquisioIncrem ental
Processom antm recursospreviam enteadquiridos
enquantoaguardaporoutrorecurso
P1

R1

R2

P2

R3

Enquantoum processoesperapeloD VD ,no


fazsentidoliberaroscannerpreviam ente
adquiridoparacopiardadosdeleparaoD VD
SunC onfidential:InternalO nly

31

Problemas com Concorrncia


D eadlock
> N oPreem po
R ecursosnopodem serrem ovidosdeum
processoatquesejam voluntariam enteliberados
P2
P1

R
Pn

U m arquivoalocadoaum
dadoprocessonopode
serliberadoatque
operaesdeatualizao
sejam concludas

SunC onfidential:InternalO nly

32

Problemas com Concorrncia


D eadlock
> EsperaC ircular
Podeexistirum cicloderecursoseprocessosno
qualcadaprocessoestaguardandorecursosque
som antidospeloprxim oprocessonociclo
P1

R1

R2

P2

ProcessoP1m antm um
D VD ,querequeridopelo
processoP2,que,porsua
vez,m antm um scanner,
querequeridopelo
processoP1

SunC onfidential:InternalO nly

33

Problemas com Concorrncia


R esolvendoD eadlocks
> Ignorareassum irquenoocorre
U suriotratadaform am aisconvenienteque
encontrar
Em geraltratadoreinicializandoosistem a

SunC onfidential:InternalO nly

34

Problemas com Concorrncia


R esolvendoD eadlocks
> Perm itirocorrer,m asdetectarecorrigir

autom aticam ente


M antm osistem acom oum todofuncionando
Poderepresentarm atarprocessosenvolvidos
Podeadotaroconceitoderollback

R estauraosprocessosaum pontoanterioraodeadlock

Adotaoconceitodecheckpointparam arcarospontos
deretorno

SunC onfidential:InternalO nly

35

Problemas com Concorrncia


R esolvendoD eadlocks
> Prevenirrem ovendoum aoum aisprcondies

Elim inaraaquisioincrem ental,requisitandotodosos


recursosem conjunto

Alocaoantecipadapodegerarpobreutilizaode
recursos

Elim inaraesperaincrem ental,im pondoum aseqncia


nicapararequisiodosrecursos

Seqnciabem selecionadapodegerarm elhor


utilizao

N ogeraboautilizaoderecursosem todososcasos

Im pedisciplinanaprogram ao
SunC onfidential:InternalO nly

36

Problemas com Concorrncia


Starvation
> Processoindefinidam enteim pedidodeexecutar

em funodeescalonam entoinjusto
Safety

C oisasruinsnoacontecem

Liveness

C oisasboaseventualm enteacontecem

Processofaralgum progressoem um dadointervalo


detem po

> Som entepodeserevitadoseosistem alivrede

deadlockeadotaum escalonam entojusto


SunC onfidential:InternalO nly

37

Problemas com Concorrncia


Starvation
> Escalonam entoJusto
Processocolocadoem um afilaassociadaao
recursorequisitado
Serecursotornasedisponvel,um processonafila
eventualm enteganhaoacessoaorecurso

> Escalonam entoInjusto


Acessopreferencialaprocessosdealtaprioridade
Poderetardarindefinidam enteum processode
baixaprioridade
SunC onfidential:InternalO nly

38

Agenda Parte 1 (Introduo)


1 Introduo
2 Motivao
3 Arquitetura de Sistemas
4 Tipos de Concorrncia
5 Programas e Processos
6 Problemas com Concorrncia

39
37

Threads

40
38

Agenda Parte 2 (Threads)


1 Caractersticas
2 Threads em Java
3 Classe Threads
4 Interface Runnable
5 Programas e Processos
6 Threads x Runnable
7 Terminando Threads
8 Prioridades
9 Gerenciamento de Threads
10 Ciclo de Vida

41
39

Caractersticas
Perm item ltiplaslinhasdefluxodecontrolede
program acoexistirem um nicoprocesso
C om partilham recursosdeum processo
> Espaodeendereosdoprocesso

C adathreadpossuiseucontadordeprogram a
individual,pilhaevariveislocais
C om unicaoviam em riacom partilhada
Tam bm denom inadoprocessoleve(lightw eight
process)
SunC onfidential:InternalO nly

42

Caractersticas
Em m onoprocessadores...
> Processadorcom partilhadoentreosthreads
> Sistem aoperacionalrealizaoescalonam ento

dethreadsdeum processo
> Threadsnosoexecutados

sim ultaneam ente


> Provsuporteaconcorrncialgica,baseada

nadivisodotem po(tim eslicing)


SunC onfidential:InternalO nly

43

Caractersticas
Em m ultiprocessadores...
> C adathreadpodeseralocadoaum

processador
> Sistem aoperacionalrealizaoescalonam ento

ealocaodethreadsaprocessadores
> Threadspodem serexecutados

sim ultaneam ente


> Provsuporteaconcorrnciafsica
SunC onfidential:InternalO nly

44

Caractersticas
Executam sim ultneaeassincronam ente
> Threadspodem m odificarvariveis

com partilhadascom outrosthreads


> Podeproduzirresultadosim previsveis

R equeraadoodem ecanism os
explcitosdesincronizao

SunC onfidential:InternalO nly

45

Threads em Java
Javasuportaconcorrnciaanveldelinguagem
> Alinguagem C suportaconcorrnciaem

bibliotecasdefunes
Adotaum m odelopreem ptivodeexecuo
> Intervalosdoprocessadorsoalocadosaos

threadsem um m odeloroundrobin
Suportaoconceitodeprioridade
Im plem entadonaclasseThreadenainterface
R unnable
SunC onfidential:InternalO nly

46

Threads em Java
Todoprogram aconsistedepelom enos
um threadqueexecutaom todomain
> threadprincipal(m ainthread)

O utrosthreadsinternospodem sercriados
internam entepelaJVM
> D ependedecadaim plem entaodeJVM

O utrosthreadsanveldeusuriopodem
serexplicitam entecriadospeloprogram a
SunC onfidential:InternalO nly

47

Classe Thread
D eveseestenderaclasseThread
Sobreporom todorun
> M todoexecutadoquandoothreadiniciado

Instanciarum ouvriosobjetosthread
Ativarom todostartdosobjetosthreadparainiciarosthreads
correspondentes
public class HelloWorldThread extends Thread {
public void run() {
System.out.println(Hello World);
}
public static void main(String[] args) {
HelloWorldThread t = new HelloWorldThread();
t.start();
}
SunC onfidential:InternalO nly

48

Classe Thread
class MyThread extends Thread {
private String message;
public MyThread(String m) {message = m;}
public void run() {
for(int r=0; r<20; r++)
System.out.println(message);
}
}
public class ThreadDemo {
public static void main(String[] args) {
MyThread t1,t2;
t1=new MyThread("primeiro thread");
t2=new MyThread("segundo thread");
t1.start();
t2.start();
}
}
SunC onfidential:InternalO nly

49

Interface Runnable
D eveseim plem entarainterfaceRunnable
Im plem entarom todorun
> M todoexecutadoquandoothreadiniciado

Instanciarum ouvriosobjetosthread
Ativarom todostartdosobjetosthreadparainiciaros
threadscorrespondentes
public class HelloWorldThread implements Runnable {
public void run() {
System.out.println(Hello World);
}
public static void main(String[] args) {
HelloWorldThread h = new HelloWorldThread();
Thread t = new Thread(h);
t.start();
}
SunC onfidential:InternalO nly

50

Interface Runnable
classMyThreadimplementsRunnable{
privateStringmessage;
publicMyThread(Stringm){message=m;}
publicvoidrun(){
for(intr=0;r<20;r++)
System.out.println(message);
}
}
publicclassThreadDemo{
publicstaticvoidmain(String[]args){
MyThreadr1,r2;
Threadt1,t2;
r1=newMyThread("primeirothread");
r2=newMyThread("segundothread");
t1=newThread(r1);
t2=newThread(r2);
t1.start();
t2.start();
}
}
SunC onfidential:InternalO nly

51

Threads x Runnable
EstenderaclasseThreadim possibilita
heranadeoutraclasse
> Javanosuportaheranam ltipla

Im plem entarainterfaceRunnable
perm iteaheranadeoutraclasse
> Javaperm iteasprim itivasextendse

implementsserem usadasconjuntam ente

SunC onfidential:InternalO nly

52

Agenda Parte 2 (Threads)


1 Caractersticas
2 Threads em Java
3 Classe Threads
4 Interface Runnable
5 Programas e Processos
6 Threads x Runnable
7 Terminando Threads
8 Prioridades
9 Gerenciamento de Threads
10 Ciclo de Vida

53
51

Terminando Threads
U m threadterm inaquandoom todorun
concludo
> M todorunretornanorm alm ente
> M todorunlanaum aexceonocapturada

Threadsnopodem serreinicializados
> Invocarom todostartm aisqueum avezgeraa

exceoInvalidThreadStateException

M todoisAlivepodeserusadoparaverificar
seothreadnofoiterm inado
SunC onfidential:InternalO nly

54

Prioridades
Podeserusadaparaexpressara
im portnciaouurgnciadediferentes
threads
Polticasdeescalonam entodethreads
nosopadronizadasem Java
> D ependentedaim plem entaodaJVM
> Em geral,prefernciadadaathreadsde

m aiorprioridade
SunC onfidential:InternalO nly

55

Prioridades
C adathreadpossuium aprioridadequevaria
entreThread.MIN_PRIORITY(1)e
Thread.MAX_PRIORITY(10)
Pordefault,cadanovothreadtem aprioridade
dothreadpai
> Threadprincipalassociadocom om todomaintem

aprioridadeThread.NORM_PRIORITY(5)

Prioridadedeum threadpodeseridentificadae
m odificadacom osm todosgetPrioritye
setPriority
SunC onfidential:InternalO nly

56

Gerenciamento de Threads
AclasseThreaddefinediversosm todospara
gerenciam entodosthreads
> M todosestticosativadospeloprpriothread

Provem inform aessobreoprpriothread


Alteram oestadodoprpriothread
> O utrosm todosquepodem serinvocadosporoutros

threads
public static Thread currentThread()
Retorna uma referncia ao thread atualmente em execuo.

SunC onfidential:InternalO nly

57

Gerenciamento de Threads
PausandoaExecuo
> O m todoThread.sleepsuspendeaexecuo

doprpriothreadporum perododetem po
especificado
Tornaoprocessadordisponvelparaoutrosthreads
Podeserusadopararegularotem podeexecuo
Precisodependedostem porizadoresdosistem aedo
escalonador
public static void sleep(long millis)
public static void sleep(long millis, int nanos)
SunC onfidential:InternalO nly

58

Gerenciamento de Threads
PausandoaExecuo
> Tem podepausapodeserterm inadopor

interrupes
G eraaexceoInterruptedException
...
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
return;
}
...

SunC onfidential:InternalO nly

59

Gerenciamento de Threads
PausandoaExecuo
> O m todoestticoThread.yieldcausao

threadpausartem porariam ente


Perm itequeoutrosthreadspossam executar
public static void yield()

SunC onfidential:InternalO nly

60

Gerenciamento de Threads
Aguardandootrm ino
> O m todojoinperm iteum threadaguardarotrm inodeum

outrothread
Invocaocausaothreadpausaratotrm inodooutro
thread
> Tam bm possvelespecificarum perododetem popara

esperarotrm inodothread
Precisodependedostem porizadoresdosistem aedo
escalonador
> Podeserterm inadoporinterrupes

G eraaexceoInterruptedException
public final void join()
public final void join(long millis)
public final void join(long millis, int nanos)
SunC onfidential:InternalO nly

61

Ciclo de Vida

R unning

sleep()

Alive

suspend()
yield()
start()

w ait()

dispatch

suspend()

R unnable

N onR unnable
resum e()
notify()
stop()
run()returns
SunC onfidential:InternalO nly

62

Agenda Parte 2 (Threads)


1 Caractersticas
2 Threads em Java
3 Classe Threads
4 Interface Runnable
5 Programas e Processos
6 Threads x Runnable
7 Terminando Threads
8 Prioridades
9 Gerenciamento de Threads
10 Ciclo de Vida

63
62

Excluso Mtua

64
62

Agenda Parte 3 (Excluso Mtua)


1 Seo Crtica
2 Excluso Mtua
3 Execuo Concorrente
4 Implementando Excluso Mtua
5 Variveis booleana compartilhada

65
63

Introduo
Processosouthreadsquecom partilham dados
devem sincronizaroacessoaosdados
> Evitaqueatualizaessejam perdidasem funodo

acessoconcorrente
i := i + 1
LD reg, i
INC reg
ST i, reg
i = 0

P:
P:
P:
Q:
Q:
Q:

LD reg, i
INC R
ST i,reg
LD reg, i
INC R
ST i, reg
i = 2
SunC onfidential:InternalO nly

P:
P:
Q:
Q:
P:
Q:

LD reg, i
INC R
LD reg, i
INC R
ST i, reg
ST i, reg
i = 1
66

Seo Crtica
SunC onfidential:InternalO nly

67

Seo Crtica
Trechodecdigoqueprecisaser
executadodeform aatm ica
> Aseocrticacontm asinstruesque

acessam recursoscom partilhados

Tam bm denom inadaregiocrtica


Paraassegurarqueum aseocrtica
executadaatom icam entedeveseadotar
tcnicasdeexclusom tua
SunC onfidential:InternalO nly

68

Excluso Mtua
Tcnicaqueasseguraqueapenasum
nicoprocessoouthreadpodeexecutara
seocrtica
> Seum processoestexecutandosuaseo

crtica,outrosprocessosnopodem entrarem
suasprpriasseescrticas
> U m processonopodeentrarem suaseo

crticasequalqueroutroprocessoestiverem
suaprpriaseocrtica
SunC onfidential:InternalO nly

69

Execuo Concorrente
ProcessoA

ProcessoB

ProcessoC

...

...

...

Cdigo no crtico
...

Cdigo no crtico
...

Cdigo no crtico
...

RequisitaExcluso
...

RequisitaExcluso
...

RequisitaExcluso
...

Seo crtica
...

Seo crtica
...

Seo crtica
...

LiberaExcluso
...

LiberaExcluso
...

LiberaExcluso
...

Cdigo no crtico
...

Cdigo no crtico
...

Cdigo no crtico
...

SunC onfidential:InternalO nly

70

Execuo Concorrente
Processospodem executarconcorrentem ente,
excetonasseescrticas
ProcessoA

ProcessoB

ProcessoC

...

...

...

Cdigo no crtico
...

Cdigo no crtico
...

Cdigo no crtico
...

RequisitaExcluso
...

RequisitaExcluso
...

RequisitaExcluso
...

Seo crtica
...

Seo crtica
...

Seo crtica
...

LiberaExcluso
...

LiberaExcluso
...

LiberaExcluso
...

Cdigo no crtico
...

Cdigo no crtico
...

Cdigo no crtico
...

SunC onfidential:InternalO nly

71

Execuo Concorrente
U m nicoprocessoentranaseocrtica
> D em aisprocessosdevem serbloqueadosquando

alcanam suasseescrticas
ProcessoA

ProcessoB

ProcessoC

...

...

...

Cdigo no crtico
...

Cdigo no crtico
...

Cdigo no crtico
...

RequisitaExcluso
...

RequisitaExcluso
...

RequisitaExcluso
...

Seo crtica
...

Seo crtica
...

Seo crtica
...

LiberaExcluso
...

LiberaExcluso
...

LiberaExcluso
...

Cdigo no crtico
...

Cdigo no crtico
...

Cdigo no crtico
...

SunC onfidential:InternalO nly

72

Implementando Excluso Mtua


C om ogarantiraexclusom tua?
O quedevem osfazerantesqueum
processoentreem suaseocrtica?
O quedevem osfazerquandoum
processoterm inasuaseocrtica?

SunC onfidential:InternalO nly

73

Implementando Excluso Mtua


EntradanaSessoC rtica(R equisitaExcluso)
> Verificarseoutroprocessoestem sua

prpriaseocrtica
> C asoafirm ativo,bloquearoprocessoatque

ooutroprocessosaiadaseocrtica
> Seno,passarexecuodaseocrtica

SadadaSessoC rtica(LiberaExcluso)
> Inform arosoutrosprocessosqueasesso

crticafoiconcluda
SunC onfidential:InternalO nly

74

Implementando Excluso Mtua


Prim itivasdotipoR equisitaExclusoe
LiberaExclusogarantem aexclusom tua
M as...
C om oim plem entartaisprim itivas?
possvelim plem entlas?
Existem vriasform asdeim plem entlas?
Sodefcilim plem entao?
SunC onfidential:InternalO nly

75

Varivel booleana compartilhada


Verdadeira
> U m dosprocessosestnaregiocrtica

Falsa
> N enhum dosprocessosestnaregiocrtica

SunC onfidential:InternalO nly

76

Varivel booleana compartilhada


ProcessoP2
Begin {RequisitaExcluso}
If Ocupado then Wait;
Ocupado = True;
End {RequisitaExcluso}
...

Varivel Global
Ocupado: Boolean;

ProcessoP1
Begin {RequisitaExcluso}
If Ocupado then Wait;
Ocupado = True;
End {RequisitaExcluso}
...

Seo crtica
...
Begin {LiberaExcluso}
Ocupado = False;
If P1 esperando then reative-o;
End {LiberaExcluso}

Seo crtica
...
Begin {LiberaExcluso}
Ocupado = False;
If P2 esperando then reative-o;
End {LiberaExcluso}
SunC onfidential:InternalO nly

Pseudocdigo
77

Varivel booleana compartilhada


public interface Lock {
public void requestCS();
public void releaseCS();
}
public class LockImpl implements Lock {
boolean busy = false;
public void requestCS() {
while (busy);
busy = true;
}
public void releaseCS() {
busy = false;
}
}
SunC onfidential:InternalO nly

em Java
78

Varivel booleana compartilhada


public class MyLock extends Thread {
Lock lock;

em Java

public MyLock(Lock lock) {


this.lock = lock;
}

public void run() {


while (true) {
lock.requestCS();
// Seo crtica
lock.releaseCS();
}
public static void main (String[] args) {
}
Lock lock = new LockImpl();
MyLock t1 = new MyLock(lock);
MyLock t2 = new MyLock(lock);
t1.start();
t2.start();
} SunC onfidential:InternalO nly

79

Perceberam como garantiu a


excluso mtua?

SunC onfidential:InternalO nly

80

No garante a excluso mtua


public class LockImpl implements Lock {
boolean busy = false;
public void requestCS() {
while (busy);
busy = true;
}
public void releaseCS() {
busy = false;
}
}

SunC onfidential:InternalO nly

81

Agenda Parte 3 (Excluso Mtua)


1 Seo Crtica
2 Excluso Mtua
3 Execuo Concorrente
4 Implementando Excluso Mtua
5 Variveis booleana compartilhada

82
81

Sincronizao

83
82

Agenda Parte 4 (Sincronizao)


1 Introduo
2 Semforos
- Tipos de Semforo
- Excluso Mtua com Semforo
- Semforo em Java
- Problema Produtor-Consumidor
- Sincronizao com Semforo
3 Monitores
- Introduo
- Monitores x Semforos
- Monitores em Java
- Mtodos Sincronizados
- Trechos de Cdigo Sincronizado
- Perigo de Deadlock
- Problema Produtor-Consumidor

84
83

Introduo
Soluesparaexclusom tuabaseadasna
esperaocupadasom uitocaras
> Processorepetidam enteverificaseacondiode

entradanasessocrticasatisfeita
> D esperdiacapacidadedeprocessam ento
> N ogeraresultadofuncionaltil

Soluesdevem idealm enteverificaracondio


deentradaapenasquandosatisfeita
> N oconsom eciclosdeprocessador

desnecessariam ente
> R equersuportedosistem aoperacional
SunC onfidential:InternalO nly

85

Introduo
Prim itivasdesincronizaosoteispara
resolveroproblem adaexclusom tuaeda
sincronizaodeprocessos
> Evitam aesperaocupada
> Provem um m ecanism odecontroledaordem

entrevriasoperaesdediferentesprocessos

Linguagensdeprogram aosuportam
diferentesprim itivasdesincronizao
> Sem foros
> M onitores
SunC onfidential:InternalO nly

86

Semforos

PropostoporD ijkstrapararesolveroproblem ada


exclusom tua
U m sem foropossui...
> U m valorinteiropositivoqueindicaquantos

processospodem acessarosem foro


Valorinicialdependedopropsitodosem foro

> U m afiladeprocessosbloqueadosaesperada

liberaodosem foro
Filainicialm entevazia

> D uasoperaesatm icasP()eV()


M odificaovalordosem foroeinclui/liberaprocessos
na/dafila
SunC onfidential:InternalO nly

87

Semforos
O peraesPrim itivas
> PeVadvm dosverbosholandesestestar

(proberen)eincrem entar(verhoegen)
Ptam bm cham adaD ow n,W aitouTest
Vtam bm cham adaU p,SignalouIncrem ent
P(s): Se s = 0 ento
Suspender processo na fila;
s = s 1;
V(s): s = s +1;
Se fila no vazia ento
Liberar um processo da fila;
SunC onfidential:InternalO nly

88

Semforos
O peraesPrim itivas
P(s): Se s = 0 ento
Suspender processo na fila;
s = s 1;
V(s): s = s +1;
Se fila no vazia ento
Liberar um processo da fila;
P(s): Se s > 0 ento
s = s 1
seno
Suspender processo na fila;
V(s): Se fila no vazia ento
Liberar um processo da fila;
seno
s = s +1
SunC onfidential:InternalO nly

89

Semforos

TiposdeSem foros
> Sem foroBinrio
Valordosem foroinicialm ente0ou1

U tilizadopararesolveroproblem adaexcluso
m tuaem sessescrticas
> Sem foroC ontador
Valordosem foroinicialm entequalquer
inteiropositivo

Valorrepresentaototalderecursos
com partilhadosentreosprocessos
U tilizadoparasincronizaodeprocessos
SunC onfidential:InternalO nly

90

Semforos
ExclusoM tuacom Sem foro
> Sessocrticadelim itadaporsem forobinrio
Varivel Global
s: Semforo Binrio;

Begin {RequisitaExcluso}
P(s);
End {RequisitaExcluso}
...

P(s): Se s = 0 ento
Suspender processo na fila;
s = s - 1

Seo crtica
...
Begin {LiberaExcluso}
V(s);
End {LiberaExcluso}
SunC onfidential:InternalO nly

91

Semforos
ExclusoM tuacom Sem foro
> G aranteaexclusom tua
> Processossoindependentes
N oalternam aexecuodasseescrticas
> Processosnosebloqueiam m utuam ente
N oentram em deadlock
> Processosnoesperam indefinidam ente,

dependendodapolticadeliberaodafila
N oacontecestarvation
> Evitaaesperaocupada
SunC onfidential:InternalO nly

92

Semforos
Sem foroem Java

Im plem entadopelaclasseSemaphore
public Semaphore(int permits)
public Semaphore(int permits, boolean fair)
C riaeinicializaum sem foro
permits valorinicialdosem foro
fair garantepolticadeliberaoFIFO (true)

public void acquire() throws InterruptedException


Im plem entaaoperaoprim itivaP
public void release()
Im plem entaaoperaoprim itivaV
SunC onfidential:InternalO nly

93

Semforos

Sem foroem Java


> Im plem entandoExclusoM tua
public class MyLock extends Thread {
Semaphore s;
int id;
public MyLock(Semaphore s, int id) {
this.s = s;
this.id = id;

public static void main (String[] args) {


int nproc = 10;

}
public void run() {
while (true) {

Semaphore s = new Semaphore(1, true);


for (int p = 0; p < nproc; p++)
(new MyLock(s, p)).start();

try {
s.acquire();
// Sesso crtica
s.release();

} catch (InterruptedException e) {}
}
}
}

SunC onfidential:InternalO nly

94

Semforos
Sincronizaocom Sem foro
> Problem aProdutorC onsum idor
Produtorproduzdadoseoscolocaem um buffer
C onsum idorrem oveosdadosdobufferparaus
los
Produtor

Produtor
coloca
dadosno
buffer

Buffer

SunC onfidential:InternalO nly

C onsum idor
rem ove
dadosdo
buffer

C onsum idor

95

Semforos
Sincronizaocom Sem foro
> Problem aProdutorC onsum idor
BufferSim ples/M ensagem nica
Varivel Global
s: Semforo Binrio; {inicialmente 0}

...

...

Armazena dados no buffer

P(s);

V(s);
...

Remove dados do buffer


...

C onsum idor

Produtor
SunC onfidential:InternalO nly

96

Semforos
Sincronizaocom Sem foro
> Problem a

public class SingleBuffer {


Semaphore s;

ProdutorC onsum idor

String value;
public SingleBuffer() {

BufferSim ples/

s = new Semaphore(0);
value = null;

M ensagem nica

}
public void deposit(String v) {
value = v;
s.release();
}
public String fetch() {
s.acquire();
return value;
}
}
SunC onfidential:InternalO nly

97

Semforos
Sincronizaocom Sem foro
> Problem aProdutorC onsum idor
BufferSim ples/M ensagem nica
public class Producer extends Thread {
SingleBuffer buffer;
String value;
public Producer(SingleBuffer b, String v) {
public class Consumer extends Thread {
buffer = b;
SingleBuffer buffer;

value = v;
}

String value;

public void run() {

public Consumer(SingleBuffer b) {
buffer = b;

buffer.deposit(value);
}

}
}

public void run() {


value = buffer.fetch();
}
SunC onfidential:InternalO nly

98

Semforos
Sincronizaocom Sem foro
> Problem aProdutorC onsum idor
BufferSim ples/M ensagem nica
public class ProducerConsumer {
public static void main (String[] args) {
String message = Campus IV;
SingleBuffer b = new SingleBuffer();
Producer p = new Producer(b, message);
Consumer c = new Consumer(b);
p.start();
c.start();
}
}
SunC onfidential:InternalO nly

99

Semforos
Sincronizaocom Sem foro
> Sem forosgarantem aexclusom tuaeperm item a

sincronizaodeprocessos
G arantiadependedocorretousodasprim itivas

Prim itivaspodem seresquecidaspeloprogram adordurantea


codificao

G arantiadependedocorretoentendim entodo
relacionam entoentreasvriasprim itivas

C digosdassessescrticassoreplicadosoudispersosnos
diferentesprocessos

Prim itivassodispersasnocdigodosprocessos

precisoavaliartodoocdigoparaentenderorelacionam ento
entreasprim itivas
SunC onfidential:InternalO nly

100

Monitores
M onitores
> C onstruoquepodeserusadaparaexclusom tua

esincronizaodeprocessos
> PropostoporD ijkstraeposteriorm enteim plem entado

porH oareeH ansen


> Explicitaecentralizaassessescrticasem um a

parteespecialdocdigo
Exclusom tuaautom aticam enteforada
Facilitaoentendim ento

> N oadotaprim itivasparadem arcarregiescrticas


Evitaoesquecim entodousodasprim itivas
SunC onfidential:InternalO nly

101

Monitores

U m m onitorpossui...
> N om equetem opropsitodeidentificao
> Variveisglobaisquesocom partilhadasentreos

processosqueusam dom onitor


> Procedim entosdeentrada(procedureentries)que

podem serativadospelosprocessos
Podem possuirvariveislocaiseparm etros
U m nicoprocessopoderativarosprocedim entosdo
m onitor,acadainstante
Im peaexclusom tuaentreprocessos
Variveisglobaissom entepodem seracessadasapartirdos
procedim entos

> C digodeinicializao
das
var
veisglobais
SunC onfidential
:Internal
O nly i

102

Monitores
monitor: nomemonitor;
declarao de variveis globais;
procedure operao1(parmetros);
declarao de variveis locais;
begin
cdigo que implementa a operao
end;
...
procedure operaoN(parmetros);
declarao de variveis locais;
begin
cdigo que implementa a operao
end;
begin
cdigo de inicializao das variveis globais
end
SunC onfidential:InternalO nly

103

Monitores
M onitoresxSem foros
S
e
m

f
o
r
o
M
o
n
i
t
o
r

Processo1

Processo2

ProcessoN

Begin
...

Begin
...

Begin
...

P(s)
Sesso crtica 1
V(s)
...
End;

Begin
...
oper1(params);
...
End;

P(s)
Sesso crtica 2
V(s)
...
End;

Begin
...
oper2(params);
...
End;
SunC onfidential:InternalO nly

P(s)
Sesso crtica N
V(s)
...
End;

Begin
...
operN(params);
...
End;
104

Monitores
Podem serim plem entadoscom oum a
classeem linguagensorientadasaobjetos
N om edaclasseouinstnciadoobjetorepresenta
onom edom onitor
Atributosrepresentam asvariveisglobais
com partilhadas
M todosrepresentam osprocedim entosdeentrada
C onstrutorrepresentaocdigodeinicializaodas
variveiscom partilhadas
SunC onfidential:InternalO nly

105

Monitores
M onitoresem Java
> TodoobjetoJavapossuium m onitorassociado
> Prim itivasynchronized perm iteacessarom onitor

deum objeto
Prim itivapodeserusadaem m todosoutrechosdecdigo
(statem ents)
Asseguraque,em um dadoinstante,apenasum nicothread
podeexecutarm todosdoobjeto

Threadpossuiobloqueio(lock)dom onitordoobjeto

Threadestdentrodom onitordoobjeto

SunC onfidential:InternalO nly

106

Monitores
M onitoresem Java
> Prim itivasynchronized
M todosSincronizados

M todosestticostam bm podem sersincronizados

Instnciaseclassepossuem m onitores(locks)
independentes

C adam onitor(objeto/classe),em um dadoinstante,


perm iteaexecuodeum nicothread

TrechosdeC digoSincronizados

Podeincrem entaraconcorrnciadethreads

Perm iteexecuosim ultneadediversosm todos


SunC onfidential:InternalO nly

107

Monitores
M onitoresem Java
D ados
O
b
j
e
t
o

Filadeprocessosdo
m onitordaclasse

M todo
sincronizado
M todo
sincronizado

Filadeprocessosdo
m onitordoobjeto

M todono
sincronizado
M todono
sincronizado

C onjuntodeprocessos
sem bloqueiodosm onitores

SunC onfidential:InternalO nly

108

Monitores

M onitoresem Java
public class SynchClassName {
private String globalVar;
public SynchClassName() {
}
public synchronized void synchMethod() {
String localVar;
}
public void nonSynchMethod() {
}
public static synchronized void synchStaticMethod() {
}
public static void nonSynchStaticMethod() {
}
}

SunC onfidential:InternalO nly

109

Monitores
public class SynchClass {
public synchronized void synchMethod(int i) {
while (true) System.out.println(i);
}
public void nonSynchMethod(int i) {
while (true) System.out.println(i);
}
public static synchronized void synchStaticMethod(int i) {
while (true) System.out.println(i);
}
public static void nonSynchStaticMethod(int i) {
while (true) System.out.println(i);
}
}
SunC onfidential:InternalO nly

110

Monitores
public class SynchImpl extends Thread {
int id;
public SynchImpl(int id, SynchClass sc) {
SynchClass sc;
...
this.id = id;
public void run() {
this.sc = sc;
switch (id) {
}
case 0:
case 1: sc.synchMethod(id); break;
case 2:
case 3: sc.nonSynchMethod(id); break;
case 4:
case 5: SynchClass.synchStaticMethod(id); break;
case 6:
case 7: SynchClass.nonSynchStaticMethod(id); break;
}
public static void main (String[] args) {
}
SynchClass sc = new SynchClass();
...
for (int i=0; i < 8; i++)
}
(new SynchImpl(i, sc)).start();
} SunC onfidential:InternalO nly

111

Monitores
M onitoresem Java
> Trechosdecdigosincronizados
public class SynchClassName {
private String globalVar;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void nonsyncMethod() {
String localVar;
...
synchronized (this) {
...
}
...
}

public void nonsyncMethod1() {


synchronized (lock1) {
...
}
}
public void nonsyncMethod2() {
synchronized (lock2) {
...
}
}

SunC onfidential:InternalO nly

112

Monitores

public class SynchClass {


private Object lock1 = new Object();
private Object lock2 = new Object();
public void synchThisMethod(int i) {
synchronized (this) {
while (true) System.out.println(i);
}
}
public void synchLock1Method(int i) {
synchronized (lock1) {
while (true) System.out.println(i);
}
}
public void synchLock2Method(int i) {
synchronized (lock2) {
while (true) System.out.println(i);
}
}
}
SunC onfidential:InternalO nly

113

Monitores

public class SynchImpl extends Thread {


int id;
SynchClass sc;
public SynchImpl(int id, SynchClass sc) {
this.id = id;
public static void main (String[] args) {
this.sc = sc;
SynchClass sc = new SynchClass();
}
for (int i=0; i < 6; i++)
(new SynchImpl(i, sc)).start();
public void run() {
}
switch (id) {
case
case
case
case
case
case

0:
1: sc.synchThisMethod(id); break;
2:
3: sc.synchLock1Method(id); break;
4:
5: sc.synchLock2Method(id); break;

}
}
...
}
SunC onfidential:InternalO nly

114

Monitores
PerigodeD eadlocks
> D evesetom arcuidadoparaevitardeadlock
public class BadSynchClass {
private int value;
public synchronized int get() {
return value;
}
public synchronized void set(int i) {
value = i;
}
public synchronized void swap(BadSynchClass bsc) {
int tmp = get();
public BadSynchClass(int v) {
set(bsc.get());
value = v;
bsc.set(tmp);
}
}
}

SunC onfidential:InternalO nly

115

Monitores

public class BadSynchImpl extends Thread {


BadSynchClass a, b;
public BadSynchImpl(BadSynchClass a, BadSynchClass b) {
this.a = a;
this.b = b;
}
public void run() {
a.swap(b);
System.out.println(A: + a.get() + B: + b.get());
}
public static void main (String[] args) {
BadSynchClass a = new BadSynchClass(1);
BadSynchClass b = new BadSynchClass(2);
(new BadSynchImpl(a, b)).start();
(new BadSynchImpl(b, a)).start();
}
}

SunC onfidential:InternalO nly

116

Fonte

Sincronizaocom M onitor
> Problem aProdutorC onsum idor
Produtorproduzdadoseoscolocaem um buffer
C onsum idorrem oveosdadosdobufferparaus
los

Produtor

Produtor
coloca
dadosno
buffer

Buffer

SunC onfidential:InternalO nly

C onsum idor
rem ove
dadosdo
buffer

C onsum idor

117

Monitores
Problem aProdutorC onsum idor
BufferSim ples/M ensagem nica
public class SingleBuffer {
String value;
boolean empty;
...

public SingleBuffer() {
value = null;
empty = true;
}

public synchronized void deposit(String v) {


value = v;
empty = false;
notify();
}
public synchronized String fetch() {
while (empty) wait();
return value;
}
}

SunC onfidential:InternalO nly

118

Monitores
public class Producer extends Thread {
SingleBuffer buffer;
String value;
public Producer(SingleBuffer b, String v) {
buffer = b;
value = v;
public class Consumer extends Thread {
}
SingleBuffer buffer;
String value;
public void run() {
buffer.deposit(value);
public Consumer(SingleBuffer b) {
}
buffer = b;
}
}
public void run() {
value = buffer.fetch();
}
}
SunC onfidential:InternalO nly

119

Monitores
public class ProducerConsumer {
public static void main (String[] args) {
String message = args[0];
SingleBuffer b = new SingleBuffer();
Producer p = new Producer(b, message);
Consumer c = new Consumer(b);
p.start();
c.start();
}
}

SunC onfidential:InternalO nly

120

Agenda Parte 4 (Sincronizao)


1 Introduo
2 Semforos
- Tipos de Semforo
- Excluso Mtua com Semforo
- Semforo em Java
- Problema Produtor-Consumidor
- Sincronizao com Semforo
3 Monitores
- Introduo
- Monitores x Semforos
- Monitores em Java
- Mtodos Sincronizados
- Trechos de Cdigo Sincronizado
- Perigo de Deadlock
- Problema Produtor-Consumidor

121

Mos obra

SunC onfidential:InternalO nly

122

Fonte
SlidesdoprofessorG ldsonElias
referentedisciplinadeLP2da
U niversidadeFederaldaParaba,2008

SunC onfidential:InternalO nly

123

Perguntas?

SunC onfidential:InternalO nly

124

Fonte
SlidesdoprofessorG ldsonElias
referentedisciplinadeLP2da
U niversidadeFederaldaParaba,2008

SunC onfidential:InternalO nly

125

Programao
Concorrente com Java
Elenilson Vieira
Embaixador de Campus da Sun
Universidade Federal da Paraba
blogs.sun.com/elenilsonvieira
elenilson.vieira@sun.com
126

Você também pode gostar