2010-10-15 13 views
11

No pude entender lo siguiente de la descripción del semáforo en javadocs.Semáforo y sincronización

Tenga en cuenta que no hay bloqueo de sincronización es celebrada cuando adquieren() se llama como que impediría un elemento de ser regresaron a la piscina. El semáforo encapsula la sincronización necesario para restringir el acceso a la piscina, por separado de cualquier sincronización necesario para mantener la consistencia de la propia piscina.

¿Alguien puede ayudarme a entender esto y sus implicaciones?

Respuesta

11

Un semáforo actúa como un limitador de la profundidad disponible del conjunto de recursos; por ejemplo, un semáforo con una capacidad de 10 permite un máximo de 10 subprocesos para adquirirlo a la vez, y cualquier subproceso adicional que intente adquirirlo se bloqueará hasta que uno de los otros subprocesos lo libere.

Esto es algo diferente de la exclusión mutua común o el bloqueo del monitor, que generalmente se usa para evitar que más de un hilo modifique simultáneamente las mismas variables y cause resultados inconsistentes o el estado del programa.

Considere, por ejemplo, un grupo de conexiones con un límite de 10 conexiones. Cada hilo que necesita una conexión adquirirá el semáforo mientras dure su uso de una conexión (lo que evita que demasiados hilos soliciten conexiones a la vez), pero el objeto de grupo también debe usar bloques o métodos sincronizados al sacar las conexiones de su interior. recopilar o volver a colocarlos, para evitar cosas tales como perder la pista de las conexiones o entregar erróneamente la misma conexión a dos subprocesos diferentes porque se realizaron simultáneamente.

+3

Una buena explicación, de hecho. +1 –