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