PDA

Ver la versión completa : urgente



ReKaN
09-02-2004, 21:29
Mi pregunta es la siguiente tengo que realizar con funciones atomic dos funciones iguales a las de un semaforo wait() y signal() para resolver problemas de exclusion mutua y una vez exo al ejecutarlo me da error y no se de ke es alguien me podria explicar por ke?? adjunto el codigo


int buffer[10];

int indEnt=0; // indice del vector en el cual se introducira el proximo numero

int indSal=0; // indice del vector de donde se tomara el proximo numero

int process[10];
int d=0;
atomic void espera(int x){
x--;
if(x < 0){
process[d] = which_proc();
suspend();
d= (d++) %10;
}
}
atomic void sigue(int x){
x++;
if( x <= 0){revive(process[d]);
d= (d--) %10;
}

}

int s; // para controlar el acceso al buffer

int vacio; // para controlar si el buffer está vacio

int lleno=10; // para controlar si el buffer está lleno
// se inicializa al numero de elementos del buffer


// Produce los numeros que se insertan en el buffer
int producir()
{
int num;
num = random(10);

cout<<"Se Produce el numero -> "<<num<<endl<<endl;

return num;
}


// Introduce los numeros producidos en el buffer
void anadir(int x)
{
buffer[indEnt]=x;
indEnt=(indEnt+1)%10; // conseguimos un entero entre 0 y 9 que se corresponde
// con uno de los indices del buffer

}




// Muestra el numero que se extrae del buffer
void consumir(int num)
{

cout<<"Se Extrae el numero-> "<<num<<endl;

}


// Extrae los numeros del buffer
int tomar()
{
int num;
num=buffer[indSal];

indSal=(indSal+1)%10; // actualizo el indice del vector para extraer el proximo
return num;
}


void Productor()
{
int x; // tomara el entero producido
int i;

for(i=0;i < 100; i++)
{
x=producir();

espera(lleno);
espera(s);
anadir(x);
sigue(s);
sigue(vacio);
}

} // fin productor



void Consumidor()
{
int x; // tomara el entero que se extrae
int i;
for(i=0 ;i < 100; i++)
{
espera(vacio); // si el buffer está vacio no puedo consumir
espera(s);
x=tomar();
sigue(s);
sigue(lleno);
consumir(x); // pongo consumir fuera de la seccion critica

}

} // fin consumidor


main()
{
s=1;
vacio=0; // inicialmente el buffer está vacio


cobegin
{
Productor();
Consumidor();
}

} // fin main

unholy
10-02-2004, 09:53
Sera casi mejor que nos digas cual es el error que te da, ponle una traza de debug si no la tienes y asi nos dices cual es el error producido...