Professional Documents
Culture Documents
Perguntas?
Comeando a brincadeira...
Introduo
8
7
9
8
Program aSequencial
> N om aisqueum aoperaoaconteceem um
dadom om ento
> decorrentedaform acom oocontrole
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?
12
13
Motivao
Buscadem aiordesem penho
R epresentaodeaspectosconcorrentes
dom undoreal
D esenvolvim entodearquiteturasde
com putadoresconcorrentes
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
16
Arquiteturas de Sistemas
Sistem asD istribudos
> C onsistedevrioscom putadoresqueoperam
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
18
17
Tipos de Concorrncia
C oncorrnciaFsica(paralelism o)
> C adaunidadeexecutadaem um
processadordedicado
C oncorrnciaLgica
> Processadorchaveadadeum aunidade
paraoutra
> C ausaaim pressoqueasunidades
19
Programas e Processos
ProcessoSequencial
> um conjuntototalm enteordenadodepassos
> D adoquaisquerdoispassossem pre
possvelindicarqualoprim eiro
> C adapassosendoum am udanadeestado
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
22
determ insticos
Seguem um aseqnciadepassosquepodeser
com pletam entereproduzidaem m ltiplas
execuescom osm esm osdadosdeentrada
program asviatestes
23
U nidadesdeexecuoprosseguem em um aordem no
predefinida
> N opossvelpredizeraseqnciadepassosque
realizadaouoresultadofinal
> M ltiplasexecuesdoprogram aconcorrentecom os
escalonam entointerno
SunC onfidential:InternalO nly
24
diagnosticar
> N odeterm inism oum pontochavedaprogram ao
concorrente
> Tornabastantedifcilaprogram ao
SunC onfidential:InternalO nly
25
C orretudenodependedavelocidadedeexecuo
> R esultadodeum program aconcorrentedependente
davelocidade
D ependedavelocidaderelativacom queosprocessos
seqenciaisconstituintessoexecutados
Pequenasflutuaesrandm icasnavelocidadedo
processadoredispositivosdeentrada/sadapodem
levaraonodeterm inism o
SunC onfidential:InternalO nly
26
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
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
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
P2
Enquantoum processolerdadosdoteclado,
nofazsentidoperm itiroutroprocessousaro
tecladoaom esm otem po
SunC onfidential:InternalO nly
30
R1
R2
P2
R3
31
R
Pn
U m arquivoalocadoaum
dadoprocessonopode
serliberadoatque
operaesdeatualizao
sejam concludas
32
R1
R2
P2
ProcessoP1m antm um
D VD ,querequeridopelo
processoP2,que,porsua
vez,m antm um scanner,
querequeridopelo
processoP1
33
34
R estauraosprocessosaum pontoanterioraodeadlock
Adotaoconceitodecheckpointparam arcarospontos
deretorno
35
Alocaoantecipadapodegerarpobreutilizaode
recursos
N ogeraboautilizaoderecursosem todososcasos
Im pedisciplinanaprogram ao
SunC onfidential:InternalO nly
36
em funodeescalonam entoinjusto
Safety
C oisasruinsnoacontecem
Liveness
C oisasboaseventualm enteacontecem
37
38
39
37
Threads
40
38
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
43
Caractersticas
Em m ultiprocessadores...
> C adathreadpodeseralocadoaum
processador
> Sistem aoperacionalrealizaoescalonam ento
ealocaodethreadsaprocessadores
> Threadspodem serexecutados
44
Caractersticas
Executam sim ultneaeassincronam ente
> Threadspodem m odificarvariveis
R equeraadoodem ecanism os
explcitosdesincronizao
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
52
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
threads
public static Thread currentThread()
Retorna uma referncia ao thread atualmente em execuo.
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;
}
...
59
Gerenciamento de Threads
PausandoaExecuo
> O m todoestticoThread.yieldcausao
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
63
62
Excluso Mtua
64
62
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
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
...
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
...
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
...
72
73
prpriaseocrtica
> C asoafirm ativo,bloquearoprocessoatque
ooutroprocessosaiadaseocrtica
> Seno,passarexecuodaseocrtica
SadadaSessoC rtica(LiberaExcluso)
> Inform arosoutrosprocessosqueasesso
crticafoiconcluda
SunC onfidential:InternalO nly
74
75
Falsa
> N enhum dosprocessosestnaregiocrtica
76
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
em Java
78
em Java
79
80
81
82
81
Sincronizao
83
82
84
83
Introduo
Soluesparaexclusom tuabaseadasna
esperaocupadasom uitocaras
> Processorepetidam enteverificaseacondiode
entradanasessocrticasatisfeita
> D esperdiacapacidadedeprocessam ento
> N ogeraresultadofuncionaltil
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
> U m afiladeprocessosbloqueadosaesperada
liberaodosem foro
Filainicialm entevazia
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)
93
Semforos
}
public void run() {
while (true) {
try {
s.acquire();
// Sesso crtica
s.release();
} catch (InterruptedException e) {}
}
}
}
94
Semforos
Sincronizaocom Sem foro
> Problem aProdutorC onsum idor
Produtorproduzdadoseoscolocaem um buffer
C onsum idorrem oveosdadosdobufferparaus
los
Produtor
Produtor
coloca
dadosno
buffer
Buffer
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}
...
...
P(s);
V(s);
...
C onsum idor
Produtor
SunC onfidential:InternalO nly
96
Semforos
Sincronizaocom Sem foro
> Problem a
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 Consumer(SingleBuffer b) {
buffer = b;
buffer.deposit(value);
}
}
}
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
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
parteespecialdocdigo
Exclusom tuaautom aticam enteforada
Facilitaoentendim ento
101
Monitores
U m m onitorpossui...
> N om equetem opropsitodeidentificao
> Variveisglobaisquesocom partilhadasentreos
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
106
Monitores
M onitoresem Java
> Prim itivasynchronized
M todosSincronizados
Instnciaseclassepossuem m onitores(locks)
independentes
TrechosdeC digoSincronizados
Podeincrem entaraconcorrnciadethreads
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
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() {
}
}
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) {
...
}
...
}
112
Monitores
113
Monitores
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);
}
}
}
115
Monitores
116
Fonte
Sincronizaocom M onitor
> Problem aProdutorC onsum idor
Produtorproduzdadoseoscolocaem um buffer
C onsum idorrem oveosdadosdobufferparaus
los
Produtor
Produtor
coloca
dadosno
buffer
Buffer
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;
}
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();
}
}
120
121
Mos obra
122
Fonte
SlidesdoprofessorG ldsonElias
referentedisciplinadeLP2da
U niversidadeFederaldaParaba,2008
123
Perguntas?
124
Fonte
SlidesdoprofessorG ldsonElias
referentedisciplinadeLP2da
U niversidadeFederaldaParaba,2008
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