Sei sulla pagina 1di 9

MUTEX

QUE ES CONCURRENCIA - MUTEX

Son el mecanismo que nos ayuda en la sincronizacin para proteger una seccin crtica en
nuestro cdigo.
Estas secciones crticas sern los datos a los que se acceda de forma concurrente.
Los mutexes son buenos slo para administrar la exclusin mutua para cierto recurso
compartido o pieza de cdigo.
Actua como candado

Mutex acta como un candado


ESTADOS DE CONCURRENCIA - MUTEX

Estado Abierto.
Elimina o abre el mutex
Si existe uno o varios hilos este se desbloquea exactamente 1 el resto espera bloqueado

Estado cerrado.
Intenta cerrar el mutex ,si no esta cerrado se cierra todo en automtico
Si esta cerrado el hilo se bloquea
FUNCIONES PARA MUTEX

Funcin Descripcin
pthread_mutex_init Inicializa una variable de tipo
pthread_mutex_t
pthread_mutex_destroy Destruye una variable mutex
pthread_mutex_lock Protege la seccin crtica (operacin P)
pthread_mutex_unlock Libera la proteccin de la seccin crtica (op.
V)
pthread_mutex_trylock Como pthread_mutex_lock pero sin bloqueo
FUNCIONES PARA MUTEX

pthread_mutex_init: inicializa una variable de tipo pthread_mutex_t


Dos parmetros
Puntero a una variable pthread_mutex_t (mutex) objeto atributo de mutex (attr)
Se inicializa por defecto haciendo el segundo parmetro NULL
Devuelve 0 si se ha podido inicializar el mutex.
#include <pthread.h>

int pthread_mutex_init (pthread_mutex_t *mutex,

const pthread_mutexattr_t *attr);

#include<pthread.h>
pthread_mutex_t my_lock;
if (pthread_mutex_init(&my_lock, NULL)!=0)
perror(No puedo inicializar my_lock);
FUNCIONES PARA MUTEX

pthread_mutex_destroy: destruye la variable mutex


El mutex no se destruye hasta que est completamente vaco (no hay threads en espera)
Devuelve 0 si se ha podido liberar el mutex.
#include <pthread.h>
int pthread_mutex_destroy (pthread_mutex_t *mutex);
FUNCIONES PARA MUTEX

pthread_mutex_lock: operacin P de semforos Cdigo de la seccin de entrada que protege la


seccin crtica
Si el candado est cerrado, el thread que la invoca se suspende hasta que el candado quede libre
Devuelve 0 si se ha podido bloquear el mutex.
pthread_mutex_trylock: igual que pthread_mutex_lock pero no
bloquea al proceso llamante si el candado est ocupado
Devuelve 0 si se ha podido bloquear el mutex.
#include <pthread.h>
int pthread_mutex_lock (pthread_mutex_t *mutex);
#include <pthread.h>
int pthread_mutex_trylock (pthread_mutex_t *mutex);
FUNCIONES PARA MUTEX

pthread_mutex_unlock: operacin V de semforos Libera el candado cuando un thread termina su


seccin crtica
Si hay algn thread suspendido en la cola del candado,despierta al primero. Devuelve 0 si se ha podido
desbloquear el mutex.
Ejemplo
#include<pthread.h>
pthread_mutex_t my_lock;
pthread_mutex_init(&mylock, NULL);
pthread_mutex_lock(&my_lock);
/* Seccin crtica */
pthread_mutex_unlock(&my_lock);
EJEMPLO PRACTICO

Tcnica utilizada por algunosvirus(un mutex) para


controlar elacceso arecursos(programas u otros
virus) y evitar que ms de unprocesoutilice el
mismo recurso al mismo tiempo. Esto dificulta la
deteccin por parte de los antivirus. Losvirusque
utilizan mutex pueden incluir otros virusen su
interior, al igual que lo hacen otros tipos de
viruscomo, por ejemplo, los polimrficos.

Potrebbero piacerti anche