2. Unbounded-buffer producer-consumer with locks
Problem:
#define N 100
int cuenta = 0;
El problema que obtenemos aquí es
void productor(void)
{
que hay una condición de carrera.
int elemento;
while(TRUE){
elemento = producir_elemento();
if(cuenta == N)sleep();
insertar_elemento(elemento);
cuenta = cuenta + 1;
if(cuenta == 1) wakeup(consumidor);
}
}
void consumidor(void)
{
int elemento;
while(TRUE) {
if(cuenta == 0)sleep();
elemento = quitar_elemento();
cuenta = cuenta - 1;
if(cuenta==N-1)wakeup(productor);
consumir_elemento(elemento);
}
}
3. Unbounded-buffer producer-consumer with locks
Solution:
Resolviendo este problema
#define N 100
typedef int semaforo;
semaforo mutex = 1l
semaforo vacias = N;
semaforo llenas = 0;
void productor(void)
mediante el uso de semáforos.
{
int elemento;
while(TRUE){
elemento = producir_elemento();
down(&vacias);
down(&mutex);
insertar_elemento(elemento);
up(&mutex);
up(&llenas);
}
}
void consumidor(void)
{
int elemento;
while(TRUE) {
down(&llenas);
down(&mutex);
elemento = quitar_elemento();
up(&mutex);
up(&llenas);
consumir_elemento(elemento);
}
}
4. How to detect and eliminate deadlock in the
dining philosophers problem.
Problem:
Cinco filosofos estan sentados alrededor de una mesa
circular,cada filosofo tiene un plato de espagueti.El espagueti es
tan resbaloso, que un filosofo necesita dos tenedores para
comerlo.Entre cada par de platos hay un tenedor,cuando un
filosofo tiene hambre, trata de adquirir sus tenedores izquierdo y
derecho, uno a la vez, en cualquier orden.Si tiene exito al
adquirir dos tenedores, come por un momento,despues deja los
tenedores y continua pensando.