../../_images/Logo_OCW10.jpg

Un productor-consumidor con problemas

struct semaf huecos, items;
tipo_cerrojo mutex;
ini_semaforo(huecos, N);
ini_semaforo(items, 0);

Productor_A()
{
        struct elemento elem;
        while (1) {
                producir_elemento_A(&elem);
                bajar(huecos);
                lock(mutex);
                insertar(elem);
                unlock(mutex);
                subir(items);
        }
}

Productor_B()
{
        struct elemento elem;
        while (1) {
                producir_elemento_B(&elem);
                lock(mutex);
                bajar(huecos);
                insertar(elem);
                unlock(mutex);
                subir(items);
        }
}

Consumidor()
{
        struct elemento elem;
        while (1) {
                bajar(items);
                lock(mutex);
                retirar(&elem);
                unlock(mutex);
                subir(huecos);
                consumir_elemento(elem);
        }
}
../../_images/Licencia10.jpg