martes, 4 de octubre de 2011

Programa examen


Instrucciones: Realice el ejercicio de procesos con semaforos
Implemente utilizando semaforos una solucion a esta variante del problema de cualquier orden (no estan ordenados circularmente en la mesa). Cuando un filosofo quiere comer, coge un par de palillos cualesquiera y cuando acaba de comer, los devuelve a la mesa. La solucion debe estar libre de interbloquedos.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int changeColor( int semaforo )
{
    //Si el valor del semaforo_1 es 1 es porque este semaforo este en verde, lo que indica que este pasa a rojo
    //y el semaforo_2 pasaria a verde, de lo contrario se invertiria el color segun lo explicado anteriormente
    if( semaforo == 1 )
    {
        semaforo = 0;
    }
    else
    {
        semaforo = 1;
    }
    return semaforo;
}


main()
{
    int timesim, tiempo;

    int semaforo1 = 0, semaforo2 = 2;

    bool entraPrimerVez = true;
    time_t comienzo, actual;
    system("clear");
    printf( "Tiempo en segundos de la Simulacion -->" );
    scanf( "%d", &timesim );
    printf( "\nIntroduzca el tiempo en segundos del cambio del Comenzales : " );
    scanf( "%d", &tiempo );

    // tiempo
    comienzo = time( NULL );

    do
    {
        actual = time( NULL );

//Entra al cuerpo del if cada que haya transcurrido el tiempo de cambio ingresadopor el usuario
        if( int( difftime(actual, comienzo) ) % tiempo == 0 && entraPrimerVez )
        {
            entraPrimerVez = false;
            semaforo1 = changeColor( semaforo1 );
            semaforo2 = changeColor( semaforo2 );

            if( semaforo1 == 1 )
            {
                printf( "\nEl Filosofo 1 esta Comiendo y el Filosofo 2 esta Comiendo" );
            }
        //    el if funciona como else por que estamos comparando que es == 0
          if ( semaforo1 == 0 )
            {
                printf( "\nEl Filosofo 3 esta Comiendo y el Filosofo 4 esta Comiendo" );
            }

            if( semaforo2 == 1 )

               {

              printf("\nEl Filosofo 5 esta comiendo");
               }
        }
        if( int( difftime(actual, comienzo) ) % tiempo > 0 )
        {
            entraPrimerVez = true;
        }
    }
    while( int( difftime(actual, comienzo) ) < timesim );

}

No hay comentarios:

Publicar un comentario