UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

11.3.5. Cerrojos: Bloqueo

Existen las siguientes funciones encargadas de tomar un cerrojo:

#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_timedlock (pthread_mutex_t *mutex, 
  const struct timespec *restrict abs_timeout);

A la hora de coger un cerrojo la opción principal es la de usar un pthread_mutex_lock, la cual tiene el siguiente comportamiento sobre el hilo:

  • Si el cerrojo mutex no se ha tomado, se toma el cerrojo y el hilo continúa con su ejecución.

  • Si el cerrojo mutex está tomado, el hilo se bloqueará interrumpiendo la ejecución del hilo.

La variante try_lock atrapa el cerrojo hasta que finaliza y la variante timedlock que permite bloquearse por un tiempo máximo, que se pasa como parámetro (abs_timeout).