Leí en alguna parte que “el semáforo es un mecanismo de señalización y el mutex es un mecanismo de bloqueo”. Según tengo entendido, el semáforo también es un mecanismo de bloqueo, pero también estoy de acuerdo en que usamos el semáforo para despertar un hilo. ¿Por qué me confunde un poco?

Le sugeriré que recuerde la analogía del inodoro de semáforos y mutex, hace que las cosas sean mucho más comprensibles.

Mutex:
Es la llave de un baño. Una persona puede tener la llave, ocupar el baño, en ese momento. Cuando termina, la persona le da (libera) la clave a la siguiente persona en la cola.

Oficialmente: “Los mutex se suelen usar para serializar el acceso a una sección de código entrante que no puede ejecutarse simultáneamente por más de un hilo. Un objeto mutex solo permite un hilo en una sección controlada, forzando a otros hilos que intentan obtener acceso a esa sección para esperar hasta que el primer hilo haya salido de esa sección “. Ref: Biblioteca de desarrolladores de Symbian
(Un mutex es realmente un semáforo con valor 1.)

Semáforo:
Es el número de llaves de inodoro idénticas gratuitas. Ejemplo, digamos que tenemos cuatro baños con cerraduras y llaves idénticas. El recuento de semáforos, el recuento de llaves, se establece en 4 al principio (los cuatro inodoros son gratuitos), luego el valor del recuento disminuye a medida que entran personas. Si todos los inodoros están llenos, es decir. no quedan teclas libres, el recuento de semáforos es 0. Ahora, cuando la ecuación. una persona sale del baño, el semáforo se incrementa a 1 (una clave gratuita) y se le da a la siguiente persona en la cola.

Oficialmente: “Un semáforo restringe el número de usuarios simultáneos de un recurso compartido hasta un número máximo. Los subprocesos pueden solicitar acceso al recurso (disminuyendo el semáforo) y pueden indicar que han terminado de usar el recurso (incrementando el semáforo). ” Ref: Biblioteca de desarrolladores de Symbian

La afirmación “mutex es un mecanismo de bloqueo y el semáforo es un mecanismo de señalización” implica que el uso de mutex solo nunca puede darle el tipo de semántica wait () – signal () en nuestros algoritmos. Estos son necesarios para que un subproceso espere en determinado evento / condición y se despierte / señale mediante un subproceso diferente cuando se cumple la condición (en espera).

Además de proteger el recurso de las condiciones de carrera, los hilos generalmente necesitan esperar () y señalizar (). Si escribimos código que proteja puramente la sección crítica con pthread_mutex_lock () y pthread_mutex_unlock (), no podemos cumplir con el tipo de requisitos wait () – signal (). O combinamos nuestro uso de bloqueos mutex con variables de condición o usamos uno o más semáforos.

He escrito una respuesta detallada aquí con pseudocódigo. Debería responder a esta pregunta: la respuesta de Siddharth Teotia a ¿Cuál es la diferencia entre mutex, condición variable, semáforo y monitor?

Básicamente, puede considerar el semáforo como la cantidad de recursos disponibles. mutex es un tipo de semáforo donde el no de recursos es 1. entonces, cuando el recurso está libre, mutex está libre n cuando es 0, lo que significa que mutex está bloqueado. Pero cuando la cantidad de recursos es mayor, usamos el semáforo para despertar los hilos en espera.

Eche un vistazo a mis esfuerzos para explicar ambos conceptos de una manera fácil de entender en BUCEO PROFUNDO CON SEMÁFORO Y MUTEX

More Interesting

¿Qué es lo que impide que la humanidad logre una IA fuerte, la velocidad de procesamiento o un algoritmo desconocido?

¿Cuáles son algunas clases abiertas en Caltech?

¿Qué reputación tienen los graduados de Rose-Hulman CSSE entre los graduados de computación de primer nivel?

¿Cuál es la mejor aplicación para compartir archivos grandes en Android?

¿Por qué Harvard CS no es muy apreciado incluso si el programa produce relativamente más premios Turing que MIT, Stanford, Berkeley?

¿Es posible predecir los precios de las acciones, dados un billón de datos de los últimos 50 años, utilizando el método de aprendizaje automático?

¿Qué deben saber las personas nuevas en el campo sobre el aprendizaje automático adversario?

¿Cómo podría el aprendizaje automático o la IA en general ayudar a la agricultura?

¿Cuáles son algunas de las mejores prácticas para construir modelos de aprendizaje automático de múltiples pasos? Cuando la salida de los modelos ML de nivel inferior se convierte en entrada para el modelo de nivel superior, ¿cómo minimizaría el error y mejoraría la precisión?

¿Qué es una 'bandeja del sistema' en mi computadora?

Soy maestra de escuela y la biología es mi asignatura. Quiero enseñar a los niños de una manera realmente interesante para que puedan entender el concepto y no olvidarlo a lo largo de su vida. Planeé convertir las lecciones en videos de animación y no sé cómo crear eso. ¿Cómo puedo hacer esto?

¿Qué modelo de aprendizaje automático ha demostrado ser más exitoso (o es el más utilizado) en el comercio / finanzas cuantitativas?

¿Hemos podido utilizar la computadora más rápida a su máximo potencial teórico?

¿Cómo pueden las películas y los juegos revisar los beneficios del sitio web del aprendizaje automático?

Se me ocurrió la idea de un proyecto, lo ejecuté y seré el primer autor de la publicación. Mi IP solicitó presentarlo por primera vez en una conferencia antes de su publicación. ¿Debería dejarlo?