7 mar 2008

El problema de los filósofos

En sistemas operativos, un proceso es un programa que se encuentra en ejecución. El concepto de proceso es de suma importancia en los sistemas operativos, es por eso que se da un énfasis fuerte a entender como es que funcionan, como interactúan entre ellos, como se sincronizan, etc, en los cursos de sistemas operativos.

Hoy escribiré sobre la sincronización de procesos, la cual es importante, ya que los procesos pueden compartir recursos (procesador, memoria, etc) y se desea evitar conflictos (condiciones de competencia) entre ellos, por ejemplo que un proceso sobrescriba (sin querer) el resultado guardado en la memoria por otro proceso. Uno de los problemas clásicos con los cuales se ilustra este tema es con el conocido problema de los filósofos (existen muchos otros como el problema del barbero, del productor consumidor etc) que fue planteado por Dijkstra, el problema va así:

Cinco filósofos están sentados en una mesa circular, cada filósofo tiene un plato de spaguetti, cada filósofo para comer su espaguetti necesita de dos tenedores, entre cada par de plato hay un tenedor (vean la figura al final del párrafo para entender mejor...) La vida de un filósofo consiste de comer y pensar, cuando un filósofo tiene hambre intenta tomar el cubierto de la izquierda para luego intentar tomar el tenedor a su derecha, si logra tomar los dos tenedores come durante un rato para luego dejar los tenedores y seguir pensando. ¿es posible escribir un programa para que cada filosofo haga lo que tiene que hacer (comer y pensar) tal que que no haya ningún filósofo que se muera de hambre, y tampoco ninguno coma eternamente?, pueden haber situaciones extrañas, por ejemplo si los cinco filósofos de manera simultanea toman su tenedor izquierdo...


He subido un programa, en C, que resuelve el problema de los filósofos usando semáforos, para descargar el programa click aqui

Para compilar el programa:

gcc -o unNombre filosofos.c -lpthread

Para ejecutarlo

./unNombre


5 comentarios:

michael dijo...

porque no se especifica las librerias:#include (pthread.h)
#include (semaphore.h) esto hace inservible entender el codigo

rRaAfFoO dijo...

opino lo mismo
sin los .h que sentido tiene este código ??

ojala los puedan subir

jlmm dijo...

El amigo sólo tuvo la culpa en algun mal de dedo al teclear, aqui envio la linea para compilar:

gcc -o unNombre filosofos.c -lpthread

y listo!

A probarlo con ./unNombre

PAGE dijo...

Gracias!! tienes razon metí la pata... pero ahora lo corrijo...

Anónimo dijo...

una duda yo intento compilar el mismo codigo pero en code blocks y no compila y menos ejecuta me podrian ayudar???? que tengo que modificarle para que en code blocks quede ejecutable

ga