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
).