exam 7

13
7/21/2019 exam 7 http://slidepdf.com/reader/full/exam-7-56d86ee58616f 1/13 Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Lectores - Escritores Profr:  María del Carmen Cerón Garnica Alumnos: Roberto Alejandro ra!o Arredondo Aldo "lores A#aricio Matricula: $%%&$'$(& $%%&)'))' $* de no!iembre de $%++ LEC,RE. / E.CR0,RE. Problema de los Lectores y Escritores  El problema de los lectores y los escritores modela el acceso a un BD.Se puede aceptar que varios procesos lean de la BD al mismo tiempo, pero si uno de los procesos está

Upload: miguelibarra

Post on 03-Mar-2016

2 views

Category:

Documents


0 download

DESCRIPTION

nOSE, DE, QUE, ES, JEJEJEJE, CUAK

TRANSCRIPT

Page 1: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 1/13

Benemérita Universidad Autónoma

del Estado de Puebla

Facultad de Cs. De la Computación

Programación Concurrente y Paralela

Lectores - Escritores

Profr:

 María del Carmen Cerón Garnica

Alumnos:

Roberto Alejandro ra!o Arredondo

Aldo "lores A#aricio

Matricula:

$%%&$'$(&

$%%&)'))'

$* de no!iembre de $%++

LEC,RE. / E.CR0,RE.

Problema de los Lectores y Escritores

 El problema de los lectores y los escritores modela el acceso a un BD.Se puede aceptarque varios procesos lean de la BD al mismo tiempo, pero si uno de los procesos está

Page 2: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 2/13

escribiendo (modificando) la BD, ninuno de los demás procesos deber!a tener acceso a

esta, ni siquiera los lectores.

.incroni1aci2n

 public class "estEscLec #

 public static void main(Strin$% ars)#

&ontrolador c 'ne &ontrolador()

**prioridad a los lectores

Lector lec

for(int i'+ i- i)#

lec ' ne Lector(c,i)

lec.start()

/

Escritor esc ' ne Escritor(c)

esc.start()

try #

"0read.sleep((int)(1at0.random()23+++))

/ catc0 (E4ception e) #

System.out.println(e)/

System.e4it(+)

/

/

 public class Lector e4tends "0read#

 private &ontrolador controlador

 private int id

 

 public Lector(&ontrolador c, int id)#

controlador ' c

t0is.id ' id

  /

**pasa un tiempo 0aciendo otra cosa

 public void otra&osa()#

try #

"0read.sleep((int)(1at0.random()2-++))

/ catc0 (E4ception e) #

System.out.println(e) /

/

 public void run() #

do #controlador.entraLectorBD()

Page 3: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 3/13

otra&osa() **pasa un tiempo

/ 0ile (true)

/

/

 public class Escritor e4tends "0read# private &ontrolador controlador

 private int id

 

 public Escritor(&ontrolador b)#

controlador ' b

  /

**piensa que escribir 

 public void pensando()#

try #

"0read.sleep((int)(1at0.random()25++))/ catc0 (E4ception e) #

System.out.println(e) /

/

 public void run() #

0ile(true) #

controlador.entraEscritorBD()

 pensando() **pasa tiempo

/

/

/

 public class &ontrolador#

 private int lectores **numero de lectores que están leyendo la BD

 private boolean turnoLectores

 private boolean turnoEscritores

 public &ontrolador ()#

lectores ' +

turnoLectores ' true **priodidad lectores

turnoEscritores ' false/

 public sync0roni6ed void entraLectorBD()

#

0ile(turnoEscritores)#

try #

ait() ** dar prioridad al escritor 

/ catc0 (E4ception e) #System.out.println(e)/

/

  **pasa a leer 

Page 4: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 4/13

  lectores

  System.out.println(7Lector leyendo en BD7)

  **pasa un tiempo leyendo

try #

"0read.sleep((int)(1at0.random()25++))

/ catc0 (E4ception e) # System.out.println(e)/  System.out.println(7Lector sale de BD7)

lectores88

if(lectores '' +)

#

turnoLectores ' false

notify() **al escritor 

/

/

 public sync0roni6ed void entraEscritorBD()

#

turnoEscritores ' true **solicita entrar 

0ile(turnoLectores)#

try #

ait() ** espera por entrar 

/ catc0 (E4ception e) #System.out.println(e)/

/

 **pasa a escribir 

  System.out.println(7Escritor escribiendo en la BD7)

try #

"0read.sleep((int)(1at0.random()29++))

/ catc0 (E4ception e) #

System.out.println(e)/

  System.out.println(7Escritor sale de BD7)

  turnoEscritores ' false

  turnoLectores ' true

  lectores ' + **iniciali6a contador lectores

  notify:ll()

//

Page 5: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 5/13

.em3foros

class BD #

 private int valor ' +

 public BD (int v) #

valor ' v

/

 public int leer (int i) #System.out.println (7Lector 7i7 leyendo7)

try #"0read.sleep (5++)/

catc0 (E4ception e) #/

System.out.println (7Lector 7i7 leyendo7)

try #"0read.sleep (5++)/

catc0 (E4ception e) #/

System.out.println (7Lector 7i7 leyendo7)

return valor

/

 public void escribir (int v, int i) #

Page 6: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 6/13

System.out.println (7Escritor 7i7 escribiendo7)

System.out.println (7Escritor 7i7 escribiendo7)

System.out.println (7Escritor 7i7 escribiendo7)

valor ' v

/

/

class &omun #

 protected static int lectores ' +

 protected static SemaforoBinario mute4 ' ne SemaforoBinario (5)

 protected static SemaforoBinario escritores ' ne SemaforoBinario (5)

 protected static BD bd ' ne BD(+)

/

class Escritor e4tends &omun implements ;unnable #

 private int i

 public Escritor (int <i) #i'<i

/

 public void run () #

for (int ='+=-=) #

System.out.println (7Escritor 7i7 quiere escribir7)

escritores.>:?"()

 bd.escribir (i,i)

escritores.S?@A:L()

/

/

/

class Lector e4tends &omun implements ;unnable #

 private int i

 public Lector (int <i) #

i'<i

/

 public void run () #for (int ='+ =- =) #

System.out.println (7Lector 7i7 quiere leer7)

mute4.>:?"()

lectores

if (lectores '' 5)

escritores.>:?"()

mute4.S?@A:L()

 bd.leer (i)

mute4.>:?"()

lectores88

if (lectores '' +)escritores.S?@A:L()

Page 7: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 7/13

mute4.S?@A:L()

System.out.println (7Lector 7i7 usa su dato7)

/

/

/

class SemaforoBinario #

 protected int contador ' +

 public SemaforoBinario (int valor?nicial) #

contador ' valor?nicial

/

sync0roni6ed public void >:?" () #

0ile (contador '' +)

try #

ait()/

catc0 (E4ception e) #/

contador88

/

sync0roni6ed public void S?@A:L () #

contador ' 5

notify()

/

/

 public class SemLectoresEscritores #

 public static void main (Strin ars$%) #

for (int i'+ii)

ne "0read (ne Escritor (i)).start()

for (int i'+ii)

ne "0read (ne Lector (i)).start()

/

/

Page 8: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 8/13

Page 9: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 9/13

Monitores

 public class BaseDatos #

 private int valor ' +

 public BaseDatos(int v) #

valor ' v/

 public int leer(int i) #

System.out.println(7Lector 7i7 leyendo7)

try #"0read.sleep(++)/

catc0 (E4ception e) #/

System.out.println(7Lector 7i7 leyendo7)

System.out.println(7Lector 7i7 leyendo7)

return valor

/

 public void escribir(int v, int i) #

System.out.println(7Escritor 7i7 escribiendo7)

System.out.println(7Escritor 7i7 escribiendo7)

System.out.println(7Escritor 7i7 escribiendo7)

valor ' v

/

/

 public class &ontroladorPrefLectores #

int contadorLectores ' +

 boolean 0ayEscritor ' false

&C9 o"o>rite ' ne &C9(7o"o>rite7)

&C9 o"o;ead ' ne &C9(7o"o;ead7)

 public &ontroladorPrefLectores() #

/

 public sync0roni6ed void empe6arLectura(int i) #

0ile(0ayEscritor) #

System.out.println(7el lector 7i7 se queda bloqueado en el

monitor7) o"o;ead.DEL:(t0is)

/

contadorLectores

o"o;ead.;ESF1E(t0is)

/

 public sync0roni6ed void terminarLectura(int i) #

contadorLectores 88

if(contadorLectores '' +)

o"o>rite.;ESF1E(t0is)

/

Page 10: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 10/13

 public sync0roni6ed void empe6arEscritura(int i) #

0ile(0ayEscritor GG (contadorLectores H' +)) #

System.out.println(7el escritor 7 i 7 se queda bloqueado en el

monitor7)

o"o>rite.DEL:(t0is)

/0ayEscritor ' true

/

 public sync0roni6ed void terminarEscritura(int i) #

0ayEscritor ' false

if(Ho"o;ead.E1P"(t0is))

o"o;ead.;ESF1E(t0is) **damos preferencia a lectores

else

o"o>rite.;ESF1E(t0is)

/

/

import =ava.util.Cector

 public class &C9 #

Cector bloqueados

 boolean condSalida

Strin nombre

static Cector condicion

 public &C9(Strin <nombre) #

nombre ' <nombre

condSalida ' false

 bloqueados ' ne Cector(+)

condicion ' ne Cector(5+)

/

 public void DEL:(Ib=ect monitor) #

sync0roni6ed(monitor) #

try #

 bloqueados.addElement ("0read.current"0read())do #

monitor.ait()

condSalida ' bloqueados.firstElement().equals

("0read.current"0read()) JJ condicion.contains

(nombre)

if(HcondSalida) monitor.notify()

/

0ile(HcondSalida)condSalida ' false

Page 11: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 11/13

 bloqueados.removeElement("0read.current"0read())

condicion.removeElement(nombre)

/ catc0(E4ception e) #e.printStac"race()/

/

/

 public void ;ESF1E(Ib=ect monitor) #

sync0roni6ed(monitor) #

if(bloqueados.si6e() K +) #

condSalida ' false

if(Hcondicion.contains(nombre))

condicion.addElement (nombre)

monitor.notify()

return

/

/

/

 public boolean E1P"(Ib=ect monitor) #

sync0roni6ed(monitor) #

if(bloqueados.si6e() K +) return false

else return true

/

/

/

 public class Escritor implements ;unnable #

 private int i

BaseDatos bd

&ontroladorPrefLectores controlador

 public Escritor(BaseDatos <bd, &ontroladorPrefLectores <controlador, int <i) #

i '<i

 bd ' <bd

controlador ' <controlador

/

 public void run() #for(int ='+=-=) #

System.out.println(7Escritor 7i7 quiere escribir7)

controlador.empe6arEscritura(i)

 bd.escribir(i,i)

controlador.terminarEscritura(i)

System.out.println(7Escritor 7i7 usa su dato7)

/

/

/

 public class Lector implements ;unnable # private int i

Page 12: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 12/13

BaseDatos bd

&ontroladorPrefLectores controlador

 public Lector(BaseDatos <bd, &ontroladorPrefLectores <controlador, int <i) #

i'<i

 bd ' <bdcontrolador ' <controlador

/

 public void run() #

for(int ='+=-=) #

System.out.println(7Lector 7i7 quiere leer7)

controlador.empe6arLectura(i)

 bd.leer(i)

controlador.terminarLectura(i)

System.out.println(7Lector 7i7 usa su dato7)

//

/

 public class 1onLectoresEscritores #

static BaseDatos bd ' ne BaseDatos(+)

static &ontroladorPrefLectores controlador ' ne &ontroladorPrefLectores()

 public static void main(Strin ars$%) #

for(int i'+ii)

ne "0read(ne Lector(bd, controlador, i)).start()

for(int i'+ii)

ne "0read(ne Escritor(bd, controlador, i)).start()

/

/

Page 13: exam 7

7/21/2019 exam 7

http://slidepdf.com/reader/full/exam-7-56d86ee58616f 13/13