Clase12 Color

8
 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2011 Prof. Ma. Laura Cobo Página 1 Lenguajes de Programación Ma. Laura Cobo Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2011 Procesos e hilos  Procesos: un programa concurrente consi ste de un número de unidades que se ej ecut an en p ar a lelo (l ógic a me nt e o físicamente). Cada una de esas unidades conforma un proceso  Hilo: este términ o se util iza cuando las unida des concurrentes 2 comparten un so o esp ac o e rec c onam ent o, es ec r t enen acceso al mismo entorno global. La diferencia entre estos términos es de suma importancia en sistemas operativos y programación de sistemas. En el contexto de lenguajes de programación, no se suele hacer una distinción entre ambos. Si la máq uin a abstr act a que ejecuta el pro gra ma no soporta concu rrenc ia, es posible simul arla mediante trans fere ncias de control explicitas de una unidad a otra. Categorías  de Concurrencia La simulación de concurrencia mediante transferencias de control ex pli citas res ult a una apr ox ima ció n de baj o niv el, que es soportada por  corrutinas. Las  corrutinas  no definen un conjunto de unidades concurrentes. 3 Solo una unidad se ejecuta por vez, la unidad en ejecución debe trans feri r el contr ol expl ícita mente a otra (vía resume) el cual retoma la ejecución en el lugar donde se había suspendido. Las unidades se activan unas a otra en un modelo de interleaving, de a cu er do al patr ón de compo rt am i ento definido en el programa. Corrutinas: ejemplo Int i = 0; // variable compartida global 4 Unit client { int stop_value = ….; …… while (i != stop_value){ ….. resume give_me_nex t; } } Unit give_me_next { int step(){ …… } …… for ( ; ;){ i += step(); resume client; } } main { resume client; }  Concurrencia La concurrencia puede ocurrir a cuatro niveles:  Nivel instrucción  (ejecu tar dos o mas instruccion es máquina simultáneamente)  Nivel sentencia de alto nivel  (ejecutar dos o mas sentencias del lenguaje de programación simultáneamente) 5  Ni vel unidad  (ej ecutar dos o mas sub pro gr ama sunidades simultáneamente)  Nivel programa  (ejecutar dos o más programas simultáneamente) Como los lengu ajes no prov een ítems para realiz ar concurrencia a nivel instruc ción ni a nivel progr ama, sólo anali zare mos los restantes dos niveles Concurrencia Evolución de las arquitecturas multiprocesador:  Décad a del 50: un procesador de propós it o gen era l y uno o mas proces adores de propós ito especial destina dos a las operacione s de entradasali da. Este esquema no requi ere soporte en el lenguaje de programación. 6 , utilizados para concurrencia a nivel programa. Estos proce sadore s eran utili zados por un plani ficado r de tareas del sistema operativo, quien distribuía trabajos de la cola en diferentes procesadores  Mediad os de la década del 60: múlti ples procesadores parci ales, utilizados para concurrencia nivel instrucción. Estos procesadores eran alimentados con instrucciones de una misma secuencia. El compi lador debe decid ir que inst rucciones pueden ejecutarse simultáneamente y planificarlas en forma acorde.

Transcript of Clase12 Color

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

LenguajesdeProgramacinConcurrenciaMa.LauraCobo

Procesosehilos Procesos: un programa concurrente consiste de un nmero de

unidades que se ejecutan en paralelo (lgicamente o fsicamente). Cada una de esas unidades conforma un proceso Hilo: este trmino se utiliza cuando las unidades concurrentes

comparten un solo espacio d di decir tienen t l i de direccionamiento, es d i ti i i t acceso al mismo entorno global.La diferencia entre estos trminos es de suma importancia en sistemas operativos y programacin de sistemas. En el contexto de lenguajes de programacin, no se suele hacer una distincin entre ambos.

UniversidadNacionaldelSur DepartamentodeCienciaseIngenieradelaComputacin 2011

Si la mquina abstracta que ejecuta el programa no soporta concurrencia, es posible simularla mediante transferencias de control explicitas de una unidad a otra.2

CategorasdeConcurrenciaLa simulacin de concurrencia mediante transferencias de control explicitas resulta una aproximacin de bajo nivel, que es soportada por corrutinas. j Las corrutinas no definen un conjunto de unidades concurrentes. Solo una unidad se ejecuta por vez, la unidad en ejecucin debe transferir el control explcitamente a otra (va resume) el cual retoma la ejecucin en el lugar donde se haba suspendido. Las unidades se activan unas a otra en un modelo de interleaving, de acuerdo al patrn de comportamiento definido en el programa.

Corrutinas:ejemploInt i = 0; // variable compartida global

Unit client { int stop_value = .; while (i != stop_value){ .. resume give_me_next; } }

main { resume client; }

Unit give_me_next { int step(){ } for ( ; ;){ i += step(); resume client; } }4

3

ConcurrenciaLa concurrencia puede ocurrir a cuatro niveles: Nivel instruccin (ejecutar dos o mas instrucciones mquinasimultneamente)

ConcurrenciaEvolucin de las arquitecturas multiprocesador: Dcada del 50: un procesador de propsito general y uno o mas

Nivel sentencia de alto nivel (ejecutar dos o mas sentencias dellenguaje de programacin simultneamente)

procesadores de propsito especial destinados a las operaciones de entradasalida. Este esquema no requiere soporte en el lenguaje de programacin. mltiples procesadores completos completos, utilizados para concurrencia a nivel programa. Estos procesadores eran utilizados por un planificador de tareas del sistema operativo, quien distribua trabajos de la cola en diferentes procesadores

Comienzo de la dcada del 60:

Nivel unidad (ejecutar dos o mas subprogramasunidadessimultneamente)

Nivel programa (ejecutar dos o ms programas simultneamente)

Como los lenguajes no proveen tems para realizar concurrencia a nivel instruccin ni a nivel programa, slo analizaremos los restantes dos niveles5

Mediados de la dcada del 60: mltiples procesadores parciales,

utilizados para concurrencia nivel instruccin. Estos procesadores eran alimentados con instrucciones de una misma secuencia. El compilador debe decidir que instrucciones pueden ejecutarse simultneamente y planificarlas en forma acorde.6

Prof.Ma.LauraCobo

Pgina1

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

ConcurrenciaLas categoras mas comunes de computadoras multiprocesador son: Arquitectura SIMD: instrucciones simples mltiples datosComputadoras que tiene mltiples procesadores que ejecutan la misma instruccin simultneamente, cada una sobre diferentes datos. Caractersticas: 1. Cada procesador tiene su memoria local. 2. Un procesador controla la operacin del resto de los procesadores. Debido a que todos los procesadores excepto el controlador, ejecutan la misma instruccin al mismo tiempo, no se requiere sincronizacin en software

CategorasdeConcurrencia Concurrencia fsica: asumiendo que hay mas de un procesador

disponible, varias unidades del mismo programa son ejecutadas simultneamentemltiplesprocesadoresindependientes,mltipleshilosdecontrol Un hilo de control en un programa es la secuencia del puntos del programa alcanzados mientras el control fluye por el programa

Concurrencia lgica: una relajacin en el concepto de concurrencia,

Arquitectura MIMD: mltiples instrucciones mltiples datosComputadoras con mltiples procesadores que operan independientemente pero cuyas operaciones pueden ser sincronizadas. Caractersticas: 1. Cada una ejecuta su propia secuencia de instrucciones. 2. Aparecen en dos configuraciones diferentes: sistemas distribuidos o sistemas memoria compartida 3. Requieren sincronizacin y soporta concurrencia a nivel unidad7

permite al programador y al software de aplicacin suponer la existencia de mltiples procesadores. La ejecucin real del programa sucede sobre un solo procesador utilizando interleaving

Laaparienciadeconcurrenciafsicaespresentadaportiempocompartido sobreunprocesador(elsoftwaresepuedediseardemaneraquese simulelapresenciademltipleshilosdecontrol)8

CategorasdeConcurrenciaCadaprocesadorsehacecargodeunsolohilodecontrol Cuando un programa con mltiples hilos se ejecuta en una mquina con un solo procesador, los hilos son mapeados a un solo hilo. Convirtindose as en un programa mltihilos virtual

Concurrenciaanivelunidad:conceptosUna tarea o proceso es una unidad que puede ser ejecutada en forma concurrente con otras unidades Caractersticas que diferencian una tarea de una unidad ordinaria: Una tarea puede ser comenzada en forma implcita Cuando una unidad comienza la ejecucin de una tarea, no necesita

Los lenguajes que proveen corrutinas, son a veces llamados quasi concurrentes ya que solo cuentan con un hilo de control

suspenderse necesariamente Cuando se completa la ejecucin de una tarea el control puede o no

retornar a la unidad que comenz su ejecucin

9

10

Concurrenciaanivelunidad:categorasCategoras de tareas: Heavyweight task: se ejecutan en su propio espacio de direcciones y

Concurrenciaanivelunidad:sincronizacinLa sincronizacin es el mecanismo que controla el orden en el cual las tareas se ejecutanTipos de sincronizacin: Sincronizacin cooperativa:

tienen sus propias pilas de ejecucin Lightweight task: corren todas en el mismo espacio de direcciones y

utilizan la misma pila de ejecucin tili l i il d j i Si una tarea no se comunica, ni afecta la ejecucin de otras tareas (de ninguna manera) se dice disjunta.

La tarea A debe esperar que la tarea B complete una actividad especfica antes que la tarea A puede continuar si ejecucin. Ejemplo el problema productorconsumidor Sincronizacin competitiva:

Dos o mas tareas deben usar un recurso que no puede ser utilizado en forma simultnea. Ejemplo: contador compartidoLa competicin es usualmente provista por acceso mutuamente excluyente11 12

Prof.Ma.LauraCobo

Pgina2

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Concurrenciaanivelunidad:sincronizacin

Concurrenciaanivelunidad:planificadorAl proveer sincronizacin se requieren mecanismos para demorar la ejecucin de una tarea. El control de ejecucin de tareas es mantenido por un programa llamado planificador, que mapea la ejecucin de tareas sobre los procesadores disponibles Las tareas pueden estar en diferentes estados: 1. New: creado pero an no comenzado. 2. Ejecutable o listo: listo para ejecutar pero no corriendo (el procesador no est disponible) 3. Corriendo: ejecutando actualmente 4. Bloqueado: estuvo ejecutndose pero ahora no puede continuar (usualmente esta esperando por la ocurrencia de un evento) 5. Muerto: no est mas activo. Una tarea muere cuando se completa su ejecucin o es matado por el programa.14

13

Concurrenciaanivelunidad:propiedadesLiveness o vivacidad significa que si un evento (terminacin del programa en forma completa) se supone que suceda, eventualmente ocurrir En programacin secuencial significa que eventualmente la unidad se completa. l En programacin concurrente, las tareas fcilmente pierden la propiedad de vivacidad. Si todas las tareas en un ambiente concurrente pierden su vivacidad, el sistema se encuentra en deadlock15

Concurrenciaanivelunidad:diseoMuchos lenguajes han sido desarrollados para soportar concurrencia: El primero fue PL/1, a mediados de la dcada del 60 Incluyendo lenguajes contemporneos como: Ada 95, Java y C# Aspectos de diseo Sincronizacin competitiva y cooperativa Cmo controlar la planificacin de tareas Como y cuando comenzar las tareas y terminar su ejecucin Como y cuando son creadas las tareasTres de las soluciones alternativas a los problemas de diseo para concurrencia: Semforos Monitores y Pasaje de mensajes16

SemforosUnsemforo esunaestructuradedatos,queconsistedeuncontadory unacolaparaalmacenarlosdescriptoresdelastareas Observacin Los semforos fueron desarrollados por Dijkstra en 1965 Pueden utilizarse para implementar guardas sobre el cdigo que accede a estructuras de datos compartidas. Solo utilizan dos operaciones wait and release. Se pueden utilizar tanto para sincronizacin cooperativa, como para sincronizacin competitiva

Semforos:sincronizacincooperativaEjemplo buffer compartido El buffer es implementado como un tipo de dato abstracto, todo dato

entra al buffer a travs de la operacin DEPOSIT y sale a travs de la operacin FETCH. As la operacin DEPOSIT necesita chequear si el buffer tiene posiciones libres y la operacin FETCH necesita chequear si el buffer contiene al menos un tem. Utilizaremos dos semforos cooperativos: emptyspots y fullspots.

Los semforos llevan un recuento de los lugares vacios y

ocupados en el buffer

17

18

Prof.Ma.LauraCobo

Pgina3

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Semforos:sincronizacincooperativaLa operacin DEPOSIT Primero chequea el semforo emptyspot para detectar si hay lugar en el

Semforos:sincronizacincooperativaLa operacin FETCH Primero chequea el semforo fullspots para detectar si hay algn valor

buffer. o Si hay lugar, el contador del semforo emptyspots es decrementado y el valor insertado. o Si no hay lugar, el llamador es almacenado en la cola del semforo emptyspots Cuando la operacin termina se debe incrementar el contador del semforo fullspots.

almacenado en el buffer. o Si hay valores, el contador del semforo fullspots es decrementado y el valor es removido. o Si no hay valores almacenados, el llamador es almacenado en la cola del semforo fullspots Cuando la operacin termina se debe incrementar el contador del semforo emptyspots.

19

20

Semforos:sincronizacincooperativaLa interaccin de las operaciones DEPOSIT y FETCH con los semforos, son realizadas a travs de las operaciones Wait y Release de los semforos. La operacin Wait:Wait(unSemaforo)If el contador de unSemaforo > 0 l t d d S f then decrementar el contador de unSemaforo else poner el llamador en la cola de unSemaforo intentar transferir el control a una tarea lista (si la cola de tareas listas esta vaca, ocurre un deadlock) end

Semforos:cdigodelproductorconsumidorSemaphore fullspot, empyspot; fullspot.count = 0; emptyspot.count = BUFFERLENGTH; Task producer; loop producir valor wait(emptyspot); {esperar por espacio} DEPOSIT(Valor); release(fullspot); {incrementar el nivel de llenado} end loop; end producer; Task consumer; loop wait(fullspot); {esperar hasta que no est vaco} FETCH(Valor); release(emptyspot); {incrementar la cantidad de vacios} consumir el valor end loop; end consumer;22

La operacin Release:Release(unSemaforo)If la cola de unSemaforo est vaca then incrementar el contador de unSemaforo else poner la tarea que hizo el llamado en la cola de tareas listas transferir el control a una tarea de la lista de unSemforo end21

Semforos:sincronizacincompetitivaLos semforos para sincronizacin competitiva estn pensados para permitir el acceso de un solo proceso a los datos por lo que compiten Los semforos para sincronizacin competitiva son generalmente llamados semforos binarios, ya que solo toman los valores 0 y 1. Es importante notar que las operaciones wait y release deben ser atmicas Para controlar el acceso al buffer, en el ejemplo, un tercer semforo, access, es utilizado (sincronizacin competitiva)

Semforos:cdigodelproductorconsumidorSemaphore fullspot, empyspot,access; access.count = 0 fullspot.count = 0; emptyspot.count = BUFFERLENGTH; Task producer; loop l producir valor wait(emptyspot); {esperar por espacio} wait(access); {esperar por acceso} DEPOSIT(Valor); release(access); {liberar el acceso} release(fullspot); {incrementar el nivel de llenado} end loop; end producer; Task consumer; p loop wait(fullspot); {esperar hasta que no est vaco} wait(access); {esperar por acceso} FETCH(Valor); release(access); {liberar el acceso} release(emptyspot); {incrementar la cantidad de vacios} consumir el valor end loop; end consumer; 24

23

Prof.Ma.LauraCobo

Pgina4

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

EvaluacindelossemforosEl mal uso de los semforos puede causar fallas en la sincronizacin cooperativa. Puede producirse un overflow en el buffer si se omite accidentalmente el wait del semforo fullspots. De la misma manera p pueden p producirse fallas en la sincronizacin competitiva, conduciendo a deadlocks en caso de omitirse el release del semforo. Lossemforossonunaherramientadesincronizacineleganteidealpara losprogramadoresquenocometenerrores(BrinchHansen,1973)

MonitoresLa idea es encapsular los datos compartidos y sus operaciones para restringir el acceso. Unmonitoresuntipodedatoabstractoparadatoscompartidos

Muchos lenguajes proveen la facilidad de definir monitores, algunos de ellos son: Concurrent Pascal, Modula, Mesa, Ada, Java, C#

25

26

Monitores:sincronizacincompetitivaLos datos estn ahora dentro del monitor en lugar de en las unidades clientes Todos los accesos a los datos dentro del monitor se realizan a travs de sus operaciones Laimplementacindelmonitoraseguraelaccesosincronizado, La implementacin del monitor aseg ra el acceso sincroni ado permitiendosolounaaccesoalavez. Lasllamadasalasunidadesdelmonitorsonimplcitamente encoladassielmonitorestocupadoenelmomentoderealizarla llamada.

Monitores:sincronizacincooperativaLa cooperacin entre procesos sigue siendo un trabajo de programacin. El programador debe seguir garantizando, en la implementacin, que no se produzca overflow o underflow del buffer (en el ejemplo anterior) Los lenguajes proveen diferentes maneras de realizar sincronizacin cooperativa, cooperativa todos terminan estando relacionadas con los semforos semforos.

27

28

Monitores:evaluacin Brindan un mejor soporte para sincronizacin competitiva que los

Pasajedemensajes El pasaje de mensajes es un modelo general para concurrencia Puede modelar tanto semforos como monitores. No es solo para sincronizacin competitiva. Idea central: la comunicacin entre tareas es como una persona

semforos Los semforos pueden utilizarse para implementar monitores Los monitores se pueden utilizar para implementar semforos El soporte para sincronizacin cooperativa es muy similar al que i i i i i il l se provee con semforos, por lo que tiene los mismo inconvenientes.

esperando por una llamada importante. A veces no queda otra que sentarse y esperar. En el caso de las tareas, si la tarea A quiere enviarle un mensaje a la tarea B, y B est esperando el mensaje, el mensaje es enviado. Esta transmisin se conoce como rendezvous. Para que el rendezvous se produzca el emisor y el receptor del mensaje deben querer que la comunicacin se produzca.

29

30

Prof.Ma.LauraCobo

Pgina5

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Pasajedemensajes:rendezvous Un mecanismo que permite a la tarea indicar cuando esta

SoportedeconcurrenciaenAdaLas tareas en Ada tienen especificacin y cuerpo. Al igual que los paquetes la especificacin tiene la interface, que es una coleccin de puntos de entradatask TareaEjemplo is entry ENTRY_1 (tem: in integer) end TareaEjemplo

disponible para aceptar mensajes. Las tareas necesitan algn modo de recordar quin est esperando por sus mensajes y una manera justa de elegir el prximo mensaje. mensaje El rendezvous se produce en la transmisin del mensaje; cuando el mensaje de la tarea emisora es aceptado por la tarea receptora Ejemplificaremos el pasaje de mensajes con el lenguaje Ada. Ada 83 soporta pasaje de mensajes sincrnicos, Ada 95 agrega soporte para pasaje de mensaje asincrnico.31

El cuerpo de la tarea describe las acciones que toman lugar cuando ocurre un rendezvous La tarea que enva el mensaje suspende mientras espera el mensaje de aceptacin y durante el rendezvous. Los puntos de entrada en la especificacin son descriptos como clusulas accept en el cuerpoaccept NombreEntrada(parmetros formales) do .. end NombreEntrada32

SoportedeconcurrenciaenAdatask body TareaEjemplo is begin loop accept ENTRY_1 (tem: in integer) do . end ENTRY_1; end loop end TareaEjemplo

SoportedeconcurrenciaenAda

La tarea ejecuta desde el comienzo hasta la clausula accept y espera por un mensaje. Durante la ejecucin del la clausula accept el emisor est suspendido. Los parmetros del accept pueden transmitir informacin en una o las dos direcciones. Cada clusula accept tiene asociada un cola que almacena los mensajes en espera.33 34

SoportedeconcurrenciaenAdaUna tarea que tiene clausulas accept, pero no otro cdigo es llamada tarea servidora. Una tarea que no tiene clausulas accept es llamada tarea actora. Estos tipos de tareas pueden enviar mensajes a otras tareas. p (entry) y) Importante: el emisor debe conocer el nombre de la entrada ( del receptor pero no viceversa (comunicacin asimtrica)

SoportedeconcurrenciaenAdaLas tareas pueden tener mas un punto de entrada Cada uno requiere una clausula accept El cuerpo de la tarea tiene una clausula accept para cada entrada colocada en una clausula select dentro de un ciclotask body TareaEjemplo is begin b i loop select accept ENTRY_1 (tem: in integer) do . end ENTRY_1; or accept ENTRY_2 (tem: in integer) do . end ENTRY_2; end select end loop end TareaEjemplo

35

36

Prof.Ma.LauraCobo

Pgina6

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Semnticadetareasconmltipleselecciones1. Si slo una cola de entry no est vaca, elegir un mensaje de ella. 2. Si hay mas de una cola no vaca, elegir una en forma no

SincronizacincooperativaCada clausula accept puede tener una guarda adosada, en la forma de clausula when que puede demorar el rendezvous. Por ejemplo: When not lleno(buffer)=>acceptDeposit(nuevoValor)do Cada clausula accept puede estar entonces: 1. Abierta: si la expresin booleana sea verdadera. 2. Cerrada: en caso de que la expresin sea falsa. Las clausulas sin guarda siempre estn abiertas

determinista, y de ella aceptar un mensaje.3. Si todas estn vacas entonces esperar

Al constructor usualmente se lo llama selective wait. Generalmente se encuentra dentro de un bucle infinito

37

38

SemnticadelselectconacceptsconguardasLa clausula select chequea las guardas de todas las clausulas 1. Si exactamente una esta abierta, se controla la cola por mensajes. 2. Si mas de una est abierta, de elige en forma no determinista una y se cheque por mensajes. h j 3. Si estn todas cerradas entonces se produce un error en ejecucin. La clausula select puede incluir una clausula else para evitar el error. Cuando la clausula else se completa se vuelve a repetir el ciclo

TerminacindetareasLa ejecucin de una tarea se completa si el control alcanza el fin del cdigo del cuerpo. Un tarea est terminada si la tarea no ha creado tareas dependientes y se completa Si una tarea se completa pero ha creado tareas dependientes no dependientes, est terminada hasta que las tareas dependientes terminen La clausula terminate en un select es solo una sentencia de terminacin. La clausula terminate solo puede seleccionarse cuando no hay clausulas abiertas en el select. La ejecucin de clausula terminate completa la tarea, la termina si sus dependientes estn terminados.40

39

ConcurrenciaenAda95Ada 95 agrega: Objetos protegidos: una manera ms eficiente de implementar datos compartidos y permitir el acceso a estructuras compartidas sin utilizar rendezvous. Comunicacin asincrnica C i i i i

EvaluacindelaconcurrenciaenAda

Modelodeconcurrenciabasadoenpasajedemensajes (mecanismogeneralpoderoso) Conausenciadeprocesadoresmltiples,elusodemonitoresy tareasquesecomunicanconmensajesessolounacuestinde gustos. gustos Parasistemasdistribuidoselmodelobasadoenmensajesesun mejormodelodeconcurrencia

41

42

Prof.Ma.LauraCobo

Pgina7

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

ConcurrenciaenJava

ConcurrenciaenJavaLaclasethread tienevariosmtodosparacontrolarlaejecucinde loshilos: Yield:esunrequerimientodelhiloenejecucinacederel procesadorenformavoluntaria. sleep:esunmtodoquepuedeprovocarqueelllamadora unmtodobloqueeelhilo. d bl l hil join:esunmtodoqueseutilizaparaforzaraunmtodoa demorarsuejecucinhastaqueelmtodorundeotrohilo completesuejecucin

ElmodelodeconcurrenciaenJavaesrelativamentesimplepero efectivo. NoresultatanpoderosocomolastareasdeAda

y LaconcurrenciaenJavaestadadaanivelunidadysonmtodos llamadosrun. Unmtodorun puedeestarenejecucinconcurrentecon otrosprocesosrun. Elprocesoenelcualelmtodorun seejecutasellama thread.

43

44

ConcurrenciaenJava:sincronizacincompetitivaUnmtodoqueincluyeelmodificadorsynchronized imposibilita queotromtodosepuedaejecutarsobreelobjetomientrasel primeroestenejecucin.. Publicsynchronizedvoiddeposito(intmonto){.} Publicsynchronizedintextraccion(){}

ConcurrenciaenJava:sincronizacincooperativaLasincronizacincooperativaselograutilizandolosmtodos:wait, notify ynotifyall. Elmtodowait debeserllamadoenunciclo. Elmtodonotify esllamadoparaindicaraunhiloenespera queeleventoqueestabaesperandosucedi. que el evento que estaba esperando sucedi Elmtodonotifyall despiertaatodosloshilosqueestnen lalistadeesperadelobjeto.

Estosdosmtodossonsincronizadosporlosqueseevitaqueuno interfieraconelotro Siserequieresincronizarsolopartedelmtodosepuedeutilizarel atributosynchronized parasentenciassynchronized(expresion)sentencia45

46

ConcurrenciaanivelsentenciaObjetivo:proveerunmecanismoparaqueelprogramadorpueda utilizarparainformaralcompiladordemanerasenlasque puedemapearelprogramaenunaarquitectura multiprocesador. Seintentaminimizarlacomunicacinentreprocesadoresylas Se intenta minimizar la comunicacin entre procesadores y las memoriasdelosotrosprocesadores Lainstruccinforall esunejemplodeconcurrenciaanivel instruccin. Atravsdeellaseespecificanunalistadesentenciasquepueden ejecutarseenformaconcurrenteForall(index=1:1000)list_1(index)=list_2(index) Indicaquetodoslosladosderechosdelas1000asignacionespueden evaluarseantesdequeseproduzcaalgunaasignacin

47

Prof.Ma.LauraCobo

Pgina8