Formalmente, podemos decir que Exclusión Mutua es la comunicación requerida entre dos o más procesos que se están ejecutando en paralelo y que necesitan a la vez el uso de un recurso NO COMPARTIBLE. Esto significa que no pueden usarlo, dos procesos al mismo tiempo.
Éste es uno de los problemas más comunes a resolver utilizando redes de petri, pero... ¿Qué significa esto? ¿Cómo debe modelarse en Redes de Petri?
En este libro veremos cómo modelar algunos casos de exclusión mutua, utilizando redes de petri.


Supongamos que tenemos que modelar con redes de petri el uso de una cinta de correr.
Sabemos que cualquier persona que llegue puede usar la cinta, siempre y cuando, no haya otra persona usándola. En ese caso, la persona espera a que la cinta se desocupe.

Entonces, para comenzar a analizar la situación tenemos como solución parcial:



En esta solución, modelamos el evento de que una persona llega a la cinta, el estado en que puede permanecer corriendo en la cinta y el evento de salida.

Pero... qué ocurre con esta solución? Puede pasar que en el sitio "usando la cinta" se acumule más de un token, por lo que, estaríamos modelando que puede haber más de una persona a la vez utilizando la cinta y esto no responde a lo solicitado inicialmente.




Entonces, cómo se soluciona esta situación? Debemos agregar un bloqueo que garantice que el evento Persona ingresa a la cinta se dé, sólo, si la cinta está desocupada.





La manera de implementar esta solución es agregando un sitio que bloquee la entrada de la persona si la cinta está ocupada.
Ese sitio, deberá estar inicializado con un token para que la transición Persona ingresa a la cinta esté habilitada la primera vez que llega una persona.
A este sitio lo llamaremos, "cinta libre".


Con esta primera aproximación, resolvemos el hecho de que las persona entren a la cinta de a una por vez, pero la solución aún está incompleta porque nos queda resolver el hecho de que las personas esperen cuando llegan y la cinta está ocupada. Esto, se resuelve fácilmente. Debemos agregar una transición que modele el evento de Llega persona y un sitio donde las personas esperen para poder utilizar la cinta. A este sitio lo llameremos Persona esperando cinta.


Resumen y otro ejemplo...

Siempre que dos o más procesos necesiten coordinar el uso de algún recurso no compartible, la forma de resolverlo, es agregando un sitio con uno o más token que proteja al recurso no-compartible.
Si por ejemplo, tenemos dos procesos diferentes, pero el recurso a compartir es el mismo, entonces debemos tener dos redes de petri en paralelo y un sitio compartido para modelar el recurso que se comparte.
Un ejemplo, de ejercicio, podría ser: un puesto de trabajo recibe pedidos para utilizar un modem o un fax. El acceso al modem o al fax no puede ser de forma simultánea, es decir, el puesto de trabajo no puede utilizar ambos recursos al mismo tiempo.

En este caso, tenemos que el módem y el fax utilizan la misma línea de teléfono, pero no podrían usarlo los dos al mismo tiempo. Por lo que, cada una debe tener un sitio que represente el uso del recurso, pero debemos tener un sitio compartido (con un token) que proteja el recurso en ambas redes (la del módem y la del fax). La solución en este caso, sería:



(debajo del libro, podemos ver la imagen en detalle)