Me Todos Sincro Niza Dos 2

62
 Programación Concurrente en Java Métodos sincronizados Monitores y condiciones Programación Concurrente ETSI Informá tica-UM M!M! "a##ardo 

description

una guia sobre hilos en java

Transcript of Me Todos Sincro Niza Dos 2

Page 1: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 162

Programacioacuten Concurrente

en JavaMeacutetodos sincronizados

Monitores y condiciones

Programacioacuten Concurrente ETSI Informaacutetica-UM MM aardo

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 262

Meacutetodos Sincronizados

$ Cada oampeto Java tiene asociado un oc(cerroampo)

$ a +aara syncronized +uede utiizarse +ara seaar aueos meacutetodos de oampetoue deen eampecutarse en ecusioacuten mutua

$ ntes de eampecutar un meacutetodo sincronizado

ay ue com+etir +ara conseguir e ocde oampeto a ue +ertenece

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 362

Eampem+o0 Proema de os

ampardines +uic cass Cont 1

+rivate int c 2 34

+uic syncronized void inc(int i)1c554

6

+uic syncronized int vaor()1

return c46

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462

Eampem+o0 Proema de os

ampardines +uic cass +uerta im+ements 7unnae1

Cont c4

+uic ampardin(Cont c)1tisc 2 c46

+uic void run()1for (int i 2 34 i8934 i55)

cinc()4

6

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562

Eampem+o0 Proema de os

ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1

fina int = 2 34Cont c 2 negt Cont()4

+uertalt + 2 negt +uerta=lt4

for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4

6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4

66

Todas as eras

com+iten

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662

Mecanismo de entradasaida a

Monitor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 2: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 262

Meacutetodos Sincronizados

$ Cada oampeto Java tiene asociado un oc(cerroampo)

$ a +aara syncronized +uede utiizarse +ara seaar aueos meacutetodos de oampetoue deen eampecutarse en ecusioacuten mutua

$ ntes de eampecutar un meacutetodo sincronizado

ay ue com+etir +ara conseguir e ocde oampeto a ue +ertenece

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 362

Eampem+o0 Proema de os

ampardines +uic cass Cont 1

+rivate int c 2 34

+uic syncronized void inc(int i)1c554

6

+uic syncronized int vaor()1

return c46

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462

Eampem+o0 Proema de os

ampardines +uic cass +uerta im+ements 7unnae1

Cont c4

+uic ampardin(Cont c)1tisc 2 c46

+uic void run()1for (int i 2 34 i8934 i55)

cinc()4

6

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562

Eampem+o0 Proema de os

ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1

fina int = 2 34Cont c 2 negt Cont()4

+uertalt + 2 negt +uerta=lt4

for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4

6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4

66

Todas as eras

com+iten

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662

Mecanismo de entradasaida a

Monitor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 3: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 362

Eampem+o0 Proema de os

ampardines +uic cass Cont 1

+rivate int c 2 34

+uic syncronized void inc(int i)1c554

6

+uic syncronized int vaor()1

return c46

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462

Eampem+o0 Proema de os

ampardines +uic cass +uerta im+ements 7unnae1

Cont c4

+uic ampardin(Cont c)1tisc 2 c46

+uic void run()1for (int i 2 34 i8934 i55)

cinc()4

6

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562

Eampem+o0 Proema de os

ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1

fina int = 2 34Cont c 2 negt Cont()4

+uertalt + 2 negt +uerta=lt4

for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4

6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4

66

Todas as eras

com+iten

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662

Mecanismo de entradasaida a

Monitor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 4: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462

Eampem+o0 Proema de os

ampardines +uic cass +uerta im+ements 7unnae1

Cont c4

+uic ampardin(Cont c)1tisc 2 c46

+uic void run()1for (int i 2 34 i8934 i55)

cinc()4

6

6

a eampecucioacuten de inc sereaiza en ecusioacuten mutua

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562

Eampem+o0 Proema de os

ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1

fina int = 2 34Cont c 2 negt Cont()4

+uertalt + 2 negt +uerta=lt4

for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4

6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4

66

Todas as eras

com+iten

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662

Mecanismo de entradasaida a

Monitor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 5: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562

Eampem+o0 Proema de os

ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1

fina int = 2 34Cont c 2 negt Cont()4

+uertalt + 2 negt +uerta=lt4

for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4

6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4

66

Todas as eras

com+iten

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662

Mecanismo de entradasaida a

Monitor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 6: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662

Mecanismo de entradasaida a

Monitor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 7: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762

$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de

entrada a im+ementacioacuten +odra usar A Una BIB

A Una IB

A Una BIB asada en +rioridades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 8: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862

Condiciones de sincronizacioacuten

Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo

void gtait()

Cuando una era eampecuta gtait()0

- iera e oc de oampeto sincronizado

- Se ouea en e conampunto de es+era

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 9: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962

Mecanismo de entradasaida

revisado

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 10: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062

isci+ina de Monitor

os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era

Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0

gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 11: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162

Meacutetodos sincronizados0

ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 12: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

mientras e uffer estaacute enovacoes+erar

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 13: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362

Meacutetodos sincronizados0

ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1

gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4

numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46

6

Camia e estado de uffer y

aviso a a otra eraD +or si acaso

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 14: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462

Meacutetodos sincronizados0 conampunto

de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue

diferentes condiciones de sincronizacioacuten seanciertas

$ Cuando una era eampecuta notifyD +uede ser ue

no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 15: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562

MFti+es +roductores y

consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua

Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 16: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662

MFti+es +roductores yconsumidores

fect

amp

KM f

-su+oniendo +roductor y L consumidores

c 9 L

3 3 9 L

Nndice +ara cada

consumidor

numatos 2 L

3 3 3

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 17: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 9 consume

c 9 L O

3 3 9 L

Nndice +ara cada

consumidor

fconsL 9 3

numatos 2 L

3 3 3

a no +uede consumir maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 18: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e consumidor 3 consume

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fcons9 9 3

numatos 2 9

3 3 3

eampa un ueco ire +ara

e +roductor

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 19: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962

MFti+es +roductores yconsumidores

fect

amp

KM f

-si e +roductor +roduce

c L L O

3 3 3 9 L

Nndice +ara cada

consumidor

fconsL L

numatos 2 L

L 3 3

Indica a todos ue +ueden

Consumir un dato maacutes

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 20: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062

MFti+es +roductores yconsumidores

+acage mutProdCons4

+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor

+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34

+rivate int nectores 2 34

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 21: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162

MFti+es +roductores yconsumidores

+uic Huffer(int tDint nectores)1tam 2 t4

2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4

for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 22: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262

MFti+es +roductores yconsumidores

+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1

gtie (numatos 22 tam) 1notify()4 gtait()46

ilt 2 d4

for (int c 2 34 c 8 nectores 4 c55) fdatosclt554

fectilt 2 nectores4

i 2 (i 5 ) tam4

numatos554

notify()46

es+erado en cascada

En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta

una eraD +uede ser ue tenga uese uir es erando

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 23: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362

MFti+es +roductores yconsumidores

+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1

gtie (fdatosidlt 22 3) 1notify()4 gtait()46

int au 2 cidlt4

fdatosidlt--4

fectcidltlt--4

if (fectcidltlt 22 3) 1numatos--4 notify()46

cidlt 2 (cidlt 5 ) tam4

return ault4

6

es+erado en cascada

Como en e caso de os +roductores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 24: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462

MFti+es +roductores yconsumidores

+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4

6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 25: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562

MFti+es +roductores yconsumidores

+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4

6

+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4

6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 26: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662

MFti+es +roductores yconsumidores

+uic cass UsaProdCons 1

+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4

Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4

for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 27: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762

MFti+es +roductores yconsumidores con notify

+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4

ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554

notify()46 ay un nuevo dato

y aviso a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 28: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862

ectoresEscritores (v inampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4

+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4

nectores554Systemout+rintn(QEntra ector Q5i)46

+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 29: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962

ectoresEscritores (v inampusta)

+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 30: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062

ectoresEscritores (v inampusta)

+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 31: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162

ectoresEscritores (v inampusta)

+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4

6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46

catc (Ece+tion e)16466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 32: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262

ectoresEscritores

$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue

no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 33: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362

ectoresEscritores (v ampusta)

+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1

gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 34: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462

ectoresEscritores (v ampusta)

+uic syncronized void +enE(int i) trogts Ece+tion1

nEscritores554

gtie (escriiendo RR (nectores 3)) 1

Systemout+rintn(QEscritor uiere entrar Q5i)4

gtait()4

6

escriiendo 2 true4

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 35: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 36: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662

ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1

nectores--4if (nectores 22 3) notify()4

6

+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4

66

es+ierta a todos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 37: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762

ectoresEscritores (v ampusta)comienza LectoresEscritores

Escritor quiere entrar 0

Escritor quiere entrar 1

Lector quiere entrar 0

Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 5

Lector quiere entrar 6

Lector quiere entrar 7

Lector quiere entrar 8

Lector quiere entrar 9

Lector quiere entrar 10

Lector quiere entrar 11

Lector quiere entrar 12

Lector quiere entrar 13

Escritor quiere entrar 1

Lector quiere entrar 0Lector quiere entrar 1

Lector quiere entrar 2

Lector quiere entrar 3

Lector quiere entrar 4

Lector quiere entrar 6

asta L3 intentos faidos +ara

ectores y 9 Escritores

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 38: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862

amadas anidadas a meacutetodossincronizados

Para ue eampecute e+()D dee otener e oc de e

era

cass Eampem+o1

+uic syncronized void +()1

6

6

Eampem+o e 2 ---

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 39: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

Para ue e eampecute e+() dee otener e oc de e

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 40: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062

cass Eampem+o91

+uic syncronized void +()1

6

6

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)D oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 41: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162

cass Eampem+o1

+uic syncronized void +()1

6

6

amadas anidadas a meacutetodossincronizados

era tiene oc(e)

Eampem+o e 2 ---

e+()

Eampem+o9 e 2

e+()

cass Eampem+o91

+uic syncronized void +()1

gtait()6

6

Si se eampecuta gtait()D se iera e oc de eD

+ero se mantiene e de eD o ue +uede +roducir oueos

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 42: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262

ProductorConsumidor concondiciones y oueo

+uic cass Condition 1

+uic syncronized void deay()1

try1gtait()4 sus+ende a a era ue o eampecuta

6catc (Ece+tion e)1646

+uic syncronized void resume()1

try1notify()4 des+ierta una era sus+endida

6catc (Ece+tion e)1646

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 43: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362

ProductorConsumidor concondiciones y oueo

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()

+uic Huffer(int t)1tam 2 t4

2 negt inttamlt466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 44: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462

ProductorConsumidor concondiciones y oueo

+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4

ilt 2 d4i 2 (i 5 ) tam4numatos554

novacioresume()46

+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4noenoresume()4return ault46

Houea a aera Huffer

Houea a aera Huffer

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 45: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562

ocs

Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras

$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los

locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado

acuire()

acuire()

Cacuire()release()

acuire()

release()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 46: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662

ocs

pulic class +eentrantLock

+eentrantLock l = new +eentrantLock()

n Lock para la exclusi-n mutua con la misma

semampntica y comportamiento ue el lock impliacutecito

tipo monitor de los meacutetodos e instrucciones

sincronizadas (synchronized) pero con mamps

posiilidades

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 47: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762

ocs0 e +roema de os ampardines

pulic class Cont

Lock l = new +eentrantLock ()

private int c =

pulic void inc(int i)

llock()

try

c00

1 2inally

lunlock()

1

1

Im+ementacioacuten de ainterfaz oc

Pido e oc

evuevo e oc

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 48: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862

ocs0 e +roema de os ampardines

pulic int valor()

llock()

try

return c

1 2inally lunlock()

1

1

Pido e oc

evuevo e oc

a caacuteusua tryfinay es

necesaria +ara devover e oc des+ueacutes de eampecutar return

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 49: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962

ocs0 condiciones

public interface Condition

Las condiciones clasi2ican los meacutetodos del monitor (wait notify and

notifyAll) en distintos oetos de 2orma ue es posile tener

m3ltiples conuntos de espera por oeto asociados a locks

Lock l = new +eentrantLock()Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition

as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 50: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062

ocs0 condiciones

6eacutetodos

void await() throws InterruptedException

$uspende a la hera en la condici-n correspondiente

void signal()

espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el

lock correspondiente antes de continuar su eecuci-n

(disciplina sinal7and7continue)

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 51: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162

ocs0 condiciones

Lock l = new +eentrantLock()

Condition c4 = lnewCondition()

Condition c5 = lnewCondition()

llock()

try

while (condicion1) c1await() mientras condicion1 esperaen c1

condicion1 se satisface

cambia el estado del objeto y condicion2 es cierta

c2signal() despertar na hebra e espera

nally

lnlock()

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 52: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262

ProductorConsumidor

+acage condicion4im+ort ampavauticoncurrentocs4

+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234

+rivate int numatos 2 34

+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4

+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4

+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 53: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362

ProductorConsumidor

+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1

ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4

6finay1ocHufferunoc()46

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 54: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462

ProductorConsumidor

+uic int etraer() trogts Interru+tedEce+tion1

Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4

try1

ocHufferoc()4

gtie (numatos 22 3) novacioagtait()4int au 2 amp4

amp 2 (amp 5 ) tam4

numatos--4

noenosigna()4

return ault46 finay 1ocHufferunoc()46

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 55: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562

Harero ormioacuten

im+ort ampavauticoncurrentocs4 +uic cass Hareria 1

+rivate oc Hoc 2 negt 7eentrantoc()4

+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4

+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 56: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662

Harero ormioacuten

+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 57: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762

Harero ormioacuten

+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4

gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164

6finay 1Hocunoc()4

66

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 58: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()466

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 59: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962

Harero ormioacuten +uic void Pear(int i)1

Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4

Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1

Hocunoc()4666

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 60: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062

Harero ormioacuten

+uic cass Harero im+ements 7unnae 1Hareria 4

+uic Harero(Hareria )1tis 2 46

+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente

finPear()466

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 61: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162

Harero ormioacuten

+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1

tis 2 4

id 2 i46

+uic void run()1 Pear(id)4

6

6

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66

Page 62: Me Todos Sincro Niza Dos 2

7172019 Me Todos Sincro Niza Dos 2

httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262

Harero ormioacuten +uic cass UsaHareria 1

+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4

for (int i 2 34 i8=4 i55)

cilt 2 negt ciente(Di)4

Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4

for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4

for (int i 2 34 i8=4 i55)ciltstart()4

66