lunes, 27 de enero de 2014

Mutaxes

MARCO TEORICO

Se utilizan para que una sola tarea trabaje a la vez, es decir, la tarea en ejecución se adueña del mutex y esta misma será quien libere el mutex una vez que haya terminado su función.

A continuación se ilustra un ejemplo acerca de la forma en que funciona esta herramienta:

1.       Existen 3 tareas, la tarea 2 se adueña del mutex:


Figura 1. Tarea 2 solicita Mutex.
2.       La tarea 3 trata de adueñarse del mutex pero esto ya no puede ser ya que en este momento pertenece a la tarea 2, por lo que la tarea 3 pasa a la fila del mutex:


Figura 2. Tarea 3 solicita Mutex.

                                                                                                                                      
3.       La tarea uno trata de adueñarse del mutex pero este ya pertenece a la tarea dos por lo que pasa de igual manera a la fila del mutex:
Figura 3. Tarea 2 solicita Mutex.


4.       La tarea 2 libera el mutex y la tarea 3 se adueña de este:
Figura 4. Tarea 2 libera Mutex.

5.       La tarea 3 libera el mutex y la tarea 1 se adueña de este:


Figura 5. Tarea 3 libera Mutex.

Creación de un Mutex.

MUTEX_STRUCTmutex;

·         Para inicializar el mutex con atributos por default:
  • result = _mutex_init(mutex_ptr, NULL)

·         Para solicitar el mutex:
  • _mqx_uint _mutex_lock(mutex_ptr)

·         Para liberar el mutex:
  • _mqx_uint _mutex_unlock(mutex_ptr)

Ejemplo.


El programa consiste en la creación de un mutex, el cual es una herramienta para sincronizar tareas y compartir recursos. EL programa consta de 4 tareas, la cual la primera que se ejecuta sirve para inicializar al mutex, para posteriormente bloquearse.
Una vez que se ejecuta alguna de las otras tareas, la tarea activa se apropia del mutex por lo cual no permite que ninguna otra trabaje hasta que esta lo libere, y de esta forma se puedan ejecutar las demás, las cuales tienen la misma lógica.

No hay comentarios:

Publicar un comentario