3.4 SINCRONIZACION DE HILOS COMPUTACION
La necesidad de la sincronización de
hilos, tiene lugar cuando varios hilos intentan acceder al mismo recurso
o dato. Es decir, los hilos necesitan establecer cierto orden, a la
hora de acceder a datos comunes. Para asegurarse de que los hilos
concurrentes no se estorban y operan correctamente con datos o recursos
compartidos, un sistema estable previene la inacición y el punto muerto o
interbloqueo. La inanición tiene lugar cuando uno o más hilos están
bloqueados al intentar conseguir el acceso a un recurso compartido de
ocurrencias limitadas. El interbloqueo es la última fase de la
inanición; ocurre cuando uno omás hilos están esperando una condición
que no puede ser satisfecha. Esto ocurre muy frecuentemente cuando dos o
más hilos están esperando a que el otro u otros desbloqueen algún dato u
objeto común.
Existen dos forma para aplicar la sincronización:
- Bloqueo de objetos
- Uso de señales.
Un objeto es bloqueado para
indicarle a los demás hilos que estan en ejecución y que pudieran
intentar acceder a éste que ya un hilo lo esta utilizando, para esto
utilizamos la palabra synchronized en la definición de los métodos que tienen la posibilidad de tener éste problema de sincronización, por ejemplo:
public synchronized int getNumero();
De ésta forma, cuando un
objeto este ejecutando el método getNumero que utiliza synchronized, se
establece un bloqueo en dicho objeto para que ningún otro hilo pueda
utilizarlo hasta que termine de ser usado por el hilo actual.
Uso de semáforos o señales.
Dentro de éste sistema, un hilo puede detener su ejecución y esperar una señal de otro hilo para continuar con su ejecución.
En este sistema encontramos varios sistemas como son el uso de mutex, semáforos y barreras.
3.4.1. Mutex.
También conocida como
cerraduras de exclusión mutua, se utilizan para implementar secciones
críticas y proteger las estructuras de datos compartidas contra accesos
concurrentes.
Se dice que las variables
mutex, es la forma más fácil de implementar la sincronización de hilos y
de proteger recursos compartidos cuando acontecen multitud de intentos
de acceso sobre esos recursos. Dicha "protección" la realizan al
"cerrar el candado o cerradura" para no permitir el acceso.
Solo un hilo puede cerrar un
candado en un determinado instante. Incluso si varios hilos intentan
cerrar el mismo candado solo uno saldrá victorio. Ningún otro hilo podrá
poseer dicho recurso hasta que el hilo que lo cerró lo abra.
3.4.2. Semáforos.
En el caso de los semáforos,
podemos establecer un número máximo de hilos que pueden tener acceso
simultáneo a un recurso compartido en específico; es decir, es una
variable especial que constituye el método clásico para restringir o
permitir el acceso a recursos compartidos.
Cada vez que un hilo intenta
utilizar el recurso compartido, existe un contador que se va
decrementando en uno y lo deja pasar. En el momento en que el contador
se convierte en cero, deja bloqueado al hilo que intentó el acceso.
Inicia(Semáforo s, Entero v) { s = v; // Declara el contador de tipo entero }P(Semáforo s) { if(s>0) // Si aún no se ha excedido el número permitido deja pasar el hilo s = s-1; // Decrementa el contador else // Si ya se tiene el número permitido de hilos ejecutándose wait(); // Deja el hilo en espera }V(Semáforo s) { if(!procesos_bloqueados) s = s+1; else signal(); }Un tipo simple de semáforo es el binario, que puede tomar los valores de 0 y 1. Se inicializa en 1 y son usados
cuando solo un proceso puede acceder a un recurso a la vez. Son esencialmente lo mismo que el mutex.
3.4.3. Barreras (Barrier).Las barreras son otro método de sincronización, y el más fácil de entender. Una barrera es un punto de encuentroentre varios hilos, en donde todos los hilos ejecutan una acción o diferentes acciones hasta llegar al barrier o puntode encuentro, una vez que han llegado todos los hilos, éstos pueden continuar con su ejecución. Esto se utilizagenerlamente, cuando una aplicación funciona por fases.La clave en éste método de sincronización es el método wait() que hará que los hilos esperen hasta la llegada detodos.
Comentarios
Publicar un comentario