sistemas sincronizacion operativos ocupada mutua exclusión exclusion espera con concurrency synchronization mutual-exclusion

concurrency - sincronizacion - ¿Diferencia entre exclusión mutua y sincronización?



exclusion mutua y sincronizacion sistemas operativos (2)

La mejor manera de entender la diferencia es con la ayuda de un ejemplo. A continuación se muestra el programa para resolver el problema del consumidor productor clásico a través del semáforo. Para proporcionar la exclusión mutua, generalmente utilizamos un semáforo binario o mutex, y para proporcionar la sincronización, usamos el semáforo.

BufferSize = 3; semaphore mutex = 1; // used for mutual exclusion semaphore empty = BufferSize; // used for synchronization semaphore full = 0; // used for synchronization Producer() { int widget; while (TRUE) { // loop forever make_new(widget); // create a new widget to put in the buffer down(&empty); // decrement the empty semaphore down(&mutex); // enter critical section put_item(widget); // put widget in buffer up(&mutex); // leave critical section up(&full); // increment the full semaphore } } Consumer() { int widget; while (TRUE) { // loop forever down(&full); // decrement the full semaphore down(&mutex); // enter critical section remove_item(widget); // take a widget from the buffer up(&mutex); // leave critical section consume_item(widget); // consume the item } }

En el código anterior, la variable de exclusión mutua proporciona exclusión mutua (permite que solo un subproceso acceda a la sección crítica) mientras que la variable completa y la vacía se utilizan para sincronizar (para calcular el acceso del recurso compartido entre varios subprocesos).

¿Cuál es la diferencia entre los dos anteriores?

Esta pregunta vino a mi mente porque encontré que

  1. Monitores y cerraduras proporcionan exclusión mutua.

  2. Semáforos y variables condicionales proporcionan sincronización.

¿Es esto cierto?

También mientras buscaba encontré este article

Cualquier aclaración por favor.


La exclusión mutua significa que solo un solo hilo debe poder acceder al recurso compartido en un momento dado. Esto evita las condiciones de carrera entre los hilos que adquieren el recurso. Los monitores y los candados proporcionan la funcionalidad para hacerlo.

La sincronización significa que usted sincroniza / ordena el acceso de múltiples hilos al recurso compartido.
Considera el ejemplo:
Si tiene dos hilos, Thread 1 y Thread 2 .
Thread 1 y el Thread 2 ejecutan en paralelo, pero antes de que el Thread 1 pueda ejecutarse, digamos una declaración A en su secuencia, es obligatorio que el Thread 2 ejecute una declaración B en su secuencia. Lo que necesitas aquí es la sincronización. Un semáforo proporciona eso. Pones una espera semifada antes de la declaración A en el Thread 1 y publicas en el semáforo después de la instrucción B en la Thread 2 .
Esto asegura la sincronización que necesita.