Sincronizacion En Java

Páginas: 12 (2883 palabras) Publicado: 28 de mayo de 2012
2.5 Mecanismos para sincronización
Una vez discutidos los principales problemas a enfrentar para coordinar procesos/hilos que
comparten espacio de direccionamiento, conviene presentar los mecanismos más
importantes para establecer sincronización.

2.5.1 Semáforos
Un semáforo general (contador) es un tipo de datos abstracto que tiene 2 operaciones para
acceso: P y V, de los nombresoriginales que les puso Dijkstra (palabras holandesas
passeren, pasar, y vrygeven, liberar. Tannenbaum las denomina down (abajo) y up (arriba)
respectivamente). En términos de la orientación a objetos un semáforo S se crea a partir de
una clase que tiene un atributo privado de tipo número entero y una pareja de métodos
públicos P y V. El funcionamiento de tales operaciones sobre S se define acontinuación:
Si el valor del contador S es positivo, un hilo al invocar P(S) decrementa a S en una acción
atómica; de otra forma (S
Fetch:

P(full)
m:= buf
V(empty)
Consume message m

od
Productor – consumidor con buffer limitado
A continuación se desarrolla una solución para el problema del buffer limitado, es decir, el
problema de implementar un buffer con multislot. También se ilustra eluso de semáforos
generales (contadores) como contadores de recursos.
Supongamos que hay un solo productor y un solo consumidor. El productor deposita
mensajes en un buffer compartido; el consumidor lo retira. Esta cola puede representarse
como una lista ligada o por un arreglo. En particular utilizaremos el arreglo y lo
representaremos como buf[1:n], donde n es mayor que 1. Sea front elíndice del mensaje
que esta en el frente de la cola, y sea rear el índice del primer slot vacio. Inicialmente, front
y rear toman el valor 0. Entonces el productor deposita mensajes m en el buffer al ejecutar:

Deposit: buf[rear] := m; rear:= rear mod n+1
Y el consumidor retira un mensaje y lo coloca en la variable local m al ejecutar:
Fetch: m:= buf[front]; front := front mod n+1
El operadormod (modulo) se usa para asegurar que el valor de front y rear estén siempre
entre 1 y n. En el siguiente pseudocodigo los semáforos sirven como contador de recursos.
En este caso, empty cuenta el número de slots vacíos del buffer, y full cuenta el número de
slots ocupados. Los semáforos contadores son útiles cuando los hilos compiten por el
acceso a múltiples recursos, como los slots delbuffer o bloques de memoria.
var buf[1:n]:T
#Para algún tipo T
var front:=0, rear:=0
var empty:=sem:=n, full:sem:=0
Producer:: do true ->
Produce message m
Deposit:
P(empty)
buf[rear] := m; rear:= rear mod n+1
V(full)
od
Consumer:: do true ->
Fetch:

P(full)
m:= buf[front]; front := front mod n+1
V(empty)
Consume message m

od

Solución para múltiples productores y múltiplesconsumidores, usando semáforos
generales (contadores)
Supongamos ahora que hay dos o más productores. Entonces cada uno podría ejecutar
deposit al mismo tiempo si hay al menos dos slots vacíos. En este caso, ambos procesos
tratarían de depositar su mensaje en el mismo slot (asignar el mensaje a buf[rear] y también
incrementar rear). Similarmente, si hay dos o más consumidores, ambos podríanejecutar
fetch al mismo tiempo y recuperar el mismo mensaje. Así, deposit y fetch llegan a ser
secciones críticas. Cada uno debe ejecutarse con exclusión mutua, pero no pueden
ejecutarse concurrentemente con cualquier otro.
Así se usan los semáforos empty y full para que los productores y consumidores accedan a
distintos slots del buffer.

Hemos solucionado dos problemas: primero lasincronización entre el productor y
consumidor, y la sincronización entre productores y entre consumidores. El siguiente
pseudocodigo ilustra esto:
var buf[1:n]:T
#Para algún tipo T
var front:=0, rear:=0
var empty:=sem:=n, full:sem:=0
var mutexD: sem:=1, mutexF:sem:=1
Producer[1:n]:: do true ->
Produce message m
Deposit:
P(empty)
# Espacios libres
P(mutexD)
buf[rear] := m; rear:= rear mod n+1...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • La Sincronización
  • Sincronización
  • Sincronizacion
  • sincronizacion de lorenz
  • Sincronización de PID
  • Sincronizacion Numerica
  • Anillo De Sincronizacion
  • Sincronizacion de Motores

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS