¿Cuáles son las principales diferencias entre un monitor y un semáforo ?
multithreading
semaphore
monitor
usuario919860
fuente
fuente
Respuestas:
Un monitor es un objeto diseñado para acceder desde múltiples subprocesos. Las funciones o métodos miembros de un objeto de supervisión impondrán una exclusión mutua, por lo que solo un subproceso puede realizar cualquier acción sobre el objeto en un momento dado. Si un hilo está ejecutando actualmente una función miembro del objeto, cualquier otro hilo que intente llamar a una función miembro de ese objeto tendrá que esperar hasta que el primero haya terminado.
Un semáforo es un objeto de nivel inferior. Bien podría usar un semáforo para implementar un monitor. Un semáforo esencialmente es solo un contador. Cuando el contador es positivo, si un subproceso intenta adquirir el semáforo, entonces está permitido y el contador disminuye. Cuando se realiza un hilo, libera el semáforo e incrementa el contador.
Si el contador ya es cero cuando un hilo intenta adquirir el semáforo, entonces tiene que esperar hasta que otro hilo libere el semáforo. Si varios hilos están esperando cuando un hilo libera un semáforo, uno de ellos lo obtiene. El hilo que libera un semáforo no necesita ser el mismo hilo que lo adquirió.
Un monitor es como un baño público. Solo una persona puede ingresar a la vez. Cierran la puerta para evitar que entren otras personas, hacen sus cosas y luego la abren cuando se van.
Un semáforo es como un lugar de alquiler de bicicletas. Tienen un cierto número de bicicletas. Si intenta alquilar una bicicleta y tienen una gratis, puede tomarla, de lo contrario debe esperar. Cuando alguien devuelve su bicicleta, entonces otra persona puede tomarla. Si tiene una bicicleta, puede dársela a otra persona para que la devuelva, al lugar de alquiler de bicicletas no le importa quién la devuelva, siempre que recuperen su bicicleta.
fuente
La siguiente explicación en realidad explica cómo la espera () y la señal () del monitor difieren de P y V del semáforo.
Las operaciones wait () y signal () en las variables de condición en un monitor son similares a las operaciones P y V en el recuento de semáforos .
Una declaración de espera puede bloquear la ejecución de un proceso, mientras que una declaración de señal puede hacer que otro proceso se desbloquee. Sin embargo, hay algunas diferencias.entre ellos. Cuando un proceso ejecuta una operación P, no necesariamente bloquea ese proceso porque el semáforo de conteo puede ser mayor que cero. Por el contrario, cuando se ejecuta una declaración de espera, siempre bloquea el proceso. Cuando una tarea ejecuta una operación V en un semáforo, desbloquea una tarea que espera en ese semáforo o incrementa el contador de semáforo si no hay ninguna tarea para desbloquear. Por otro lado, si un proceso ejecuta una declaración de señal cuando no hay otro proceso para desbloquear, no hay efecto en la variable de condición. Otra diferencia entre semáforos y monitores es que los usuarios despertados por una operación V pueden reanudar la ejecución sin demora. Por el contrario, los usuarios despertados por una operación de señal se reinician solo cuando el monitor está desbloqueado. Adicionalmente,
Enlace: aquí para leer más. Espero eso ayude.
fuente
Respuesta de una línea:
Monitor: controla que solo UN hilo a la vez puede ejecutarse en el monitor. (necesita adquirir el bloqueo para ejecutar el hilo único)
Semáforo: una cerradura que protege un recurso compartido. (necesita adquirir el bloqueo para acceder al recurso)
fuente
Semaphore permite que múltiples hilos (hasta un número establecido) accedan a un objeto compartido. Los monitores permiten el acceso mutuamente exclusivo a un objeto compartido.
Monitor
Semáforo
fuente
java.util.ArrayList
: ¿es un objeto o contenedor de múltiples objetos? Bueno, es ambos al mismo tiempo. Entonces, ¿es apropiado el semáforo para controlar el acceso a él? Yo diría que no.Cuando se utiliza un semáforo para proteger una región crítica, no existe una relación directa entre el semáforo y los datos que se protegen. Esta es parte de la razón por la cual los semáforos pueden estar dispersos alrededor del código, y por qué es fácil olvidar llamar en espera o notificar , en cuyo caso el resultado será, respectivamente, violar la exclusión mutua o bloquear el recurso permanentemente.
Por el contrario, puede ocurrir que estas cosas malas sucedan con un monitor. Un monitor está cansado directamente de los datos (los encapsula) y, dado que las operaciones del monitor son acciones atómicas, es imposible escribir código que pueda acceder a los datos sin llamar al protocolo de entrada. El protocolo de salida se llama automáticamente cuando se completa la operación del monitor.
Un monitor tiene un mecanismo incorporado para la sincronización de condiciones en forma de variable de condición antes de continuar. Si la condición no se cumple, el proceso tiene que esperar hasta que se le notifique un cambio en la condición. Cuando un proceso está esperando la sincronización de la condición, la implementación del monitor se ocupa del problema de exclusión mutua y permite que otro proceso obtenga acceso al monitor.
Tomado del material del curso "Proceso de interacción" de la Unidad 3 de la Universidad M362 de The Open University.
fuente
Semáforo
El uso de un contador o indicador para controlar el acceso a algunos recursos compartidos en un sistema concurrente implica el uso de Semaphore .
Ejemplo:
Las banderas solo revelan el estado actual del Recurso, sin conteo ni ninguna otra información sobre los objetos en espera o en ejecución en el recurso.
Monitor :
Un monitor sincroniza el acceso a un objeto comunicándose con hilos interesados en el objeto, pidiéndoles que obtengan acceso o esperen a que se cumpla alguna condición.
Ejemplo:
fuente