3.7 Sincronización De Hilos

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 o má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.


Bloqueo de objetos.

Un objeto es bloqueado para indicarle a los demás hilos que están 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.

No hay comentarios:

Publicar un comentario