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", ×im );
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 );
}