Supongamos que los procesos hacen la imitación de los comensales. Hay una serie de recursos limitados, que son los tenedores, y son menos que el número de comensales. Cuando un proceso necesita "comer", necesita dos de esos recursos, que estén libres.
Necesitas acordar la forma de paso de información entre los procesos. Puede ser con System V o con ficheros, pero debes decidirlo. Y además, si usas ficheros, debes tener en cuenta las situaciones de carrera si dos procesos intentan escribir a los ficheros a la vez.
Luego, viene la forma en la que se deben comportar los procesos: durante cuánto tiempo seguido máximo pueden comer (cortesía), durante cuánto tiempo máximo (saciar), cuánto tiempo deben esperar si no hay recursos libres (paciencia), cuánto tiempo pueden esperar sin sentir la necesidad de comer (espera), cuánto tiempo pueden esperar sin comer (hambre), qué debe ocurrir si un proceso está a punto de morir de hambre: ¿hay prioridades, hay colas de procesos, qué debe pasar con los que llevan mucho tiempo esperando? La forma de repartir los recursos: ¿los comensales se abalanzan contra los recursos y el más rápido se hace con ellos? ¿qué es lo que pasa cuando uno deja de comer y libera los recursos: los deja simplemente o le avisa al siguiente comensal de que puede entrar a comer?
En la página de Wikipedia y otros sitios tienes comentadas diferentes estrategias. Naturalmente, puedes no adoptar ninguna estrategia de reparto de recursos, y solo confiar en el comportamiento de los propios procesos (las variables comentadas antes).
La forma de hacerlo en Linux, mediante fork(2), puede ser simplemente lanzando los procesos en segundo plano, desde el shell, agregando un '&' al final. Por ejemplo:
Using bash Syntax Highlighting
#!/bin/bash
for i in {1..5}
do
comensal $i &
done
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Y así tienes arrancados los 5 procesos. Son todos el mismo proceso (en este ejemplo, en otros casos puedes simular comportamientos distintos), y a cada uno le pasas un número para que el propio proceso sepa quién es (puede no ser relevante, pero si quieres imprimir en pantalla lo que está pasando, te interesa saber qué proceso hace qué).