En este artículo, veremos varios problemas clásicos de sincronización como ejemplos de una gran clase de problemas de control de concurrencia. En nuestras soluciones a los problemas, utilizamos semáforos para la sincronización, ya que esa es la forma tradicional de presentar tales soluciones. Sin embargo, las implementaciones reales de estas soluciones podrían usar bloqueos mutex en lugar de semáforos binarios.
Estos problemas se utilizan para probar casi todos los esquemas de sincronización propuestos recientemente. Los siguientes problemas de sincronización se consideran problemas clásicos:
1. Bounded-buffer (or Producer-Consumer) Problem, 2. Dining-Philosophers Problem, 3. Readers and Writers Problem, 4. Sleeping Barber Problem
Estos se resumen, para una explicación detallada, puede ver los artículos vinculados para cada uno.
- Problema del búfer acotado (o productor-consumidor) :
El problema del búfer acotado también se denomina problema del consumidor del productor. Este problema se generaliza en términos del problema Productor-Consumidor. La solución a este problema es crear dos semáforos de conteo «lleno» y «vacío» para realizar un seguimiento del número actual de búferes llenos y vacíos, respectivamente. Los productores producen un producto y los consumidores consumen el producto, pero ambos usan uno de los contenedores cada vez.
- Problema de los filósofos comedores :
El problema de los filósofos comedores establece que los filósofos K se sientan alrededor de una mesa circular con un palillo entre cada par de filósofos. Hay un palillo entre cada filósofo. Un filósofo puede comer si puede recoger los dos palillos adyacentes a él. Un palillo puede ser recogido por cualquiera de sus seguidores adyacentes, pero no por ambos. Este problema implica la asignación de recursos limitados a un grupo de procesos de una manera libre de estancamiento y de inanición.
- Problema de lectores y escritores :
suponga que una base de datos se va a compartir entre varios procesos concurrentes. Algunos de estos procesos pueden querer solo leer la base de datos, mientras que otros pueden querer actualizar (es decir, leer y escribir) la base de datos. Distinguimos entre estos dos tipos de procesos al referirnos a los primeros como lectores y a los segundos como escritores. Precisamente en OS llamamos a esta situación el problema de lectores-escritores. Parámetros del problema:- Un conjunto de datos se comparte entre varios procesos.
- Una vez que un escritor está listo, realiza su escritura. Sólo un escritor puede escribir a la vez.
- Si un proceso está escribiendo, ningún otro proceso puede leerlo.
- Si al menos un lector está leyendo, ningún otro proceso puede escribir.
- Los lectores no pueden escribir y solo leer.
- Un conjunto de datos se comparte entre varios procesos.
- Problema del peluquero durmiente :
Peluquería con un peluquero, una silla de peluquero y N sillas para esperar. Cuando no hay clientes, el peluquero se duerme en la silla de peluquero y debe despertarse cuando entra un cliente. Cuando el peluquero está cortando el cabello, los nuevos clientes toman vacío asientos para esperar, o retirarse si no hay vacantes.
Publicación traducida automáticamente
Artículo escrito por Mithlesh Upadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA