Resultados 1 al 2 de 2

urgente

  1. #1 urgente 
    Iniciado
    Fecha de ingreso
    Apr 2003
    Mensajes
    5
    Descargas
    0
    Uploads
    0
    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
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    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...
    Citar  
     

Temas similares

  1. urgente
    Por rios2004jf en el foro DIGITAL+
    Respuestas: 4
    Último mensaje: 11-07-2007, 11:04
  2. urgente
    Por alhpower en el foro DIGITAL+
    Respuestas: 19
    Último mensaje: 21-02-2006, 17:11
  3. urgente
    Por consul501 en el foro INGENIERIA INVERSA
    Respuestas: 3
    Último mensaje: 29-10-2005, 13:57
  4. Urgente Difundir Urgente!!!
    Por fermarlop en el foro OFF-TOPIC
    Respuestas: 1
    Último mensaje: 24-03-2003, 12:47
  5. Urgente
    Por Mariana en el foro INGENIERIA INVERSA
    Respuestas: 4
    Último mensaje: 22-11-2001, 13:03

Marcadores

Marcadores