miércoles, 12 de octubre de 2011

FIFO y LIFO




FIFO


First in, first out o FIFO (en español "primero en entrar, primero en salir"), es un concepto utilizado en estructuras de datos, contabilidad de costes y teoría de colas. Guarda analogía con las personas que esperan en una cola y van siendo atendidas en el orden en que llegaron, es decir, que la primera persona que entra es la primera persona que sale.


También se lo llama first come first served o FCFS (en español "primero en llegar, primero en ser atendido").









LIFO

El término LIFO se utiliza en estructuras de datos y teoría de colas. Guarda analogía con una pila de platos, en la que los platos van poniéndose uno sobre el otro, y si se quiere sacar uno, se saca primero el último que se puso.

LIFO es el algoritmo utilizado para implementar pilas.



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 );

}