Suponiendo que un hilo llama con éxito a pthread_mutex_lock
, ¿todavía es posible que falle una llamada a pthread_mutex_unlock
en ese mismo hilo? Si es así, ¿puedes hacer algo al respecto además de abortar el hilo?¿Cómo manejas los fallos pthread_mutex_unlock?
if(pthread_mutex_lock(&m) == 0)
{
// got the lock, let's do some work
if(pthread_mutex_unlock(&m) != 0) // can this really fail?
{
// ok, we have a lock but can't unlock it?
}
}
De this page, posibles errores para pthread_mutex_unlock()
son:
[EINVAL] El valor especificado por mutex no se refiere a un objeto mutex inicializado.
Si el bloqueo tuvo éxito, es poco probable que esto falle.
[EAGAIN] El mutex no podía ser adquirido porque se ha excedido el número máximo de cerraduras recursivo para mutex.
¿Realmente? Para desbloquear?
La función pthread_mutex_unlock() puede fallar si:
[EPERM] El hilo actual no posee el mutex.
Nuevamente, si el bloqueo se realizó correctamente, esto tampoco debería ocurrir.
Por lo tanto, mi opinión es si hay un bloqueo exitoso, entonces en esta situación, el desbloqueo nunca debe fallar, haciendo que la comprobación de errores y el código de manejo posterior no tengan sentido.
Gracias, eso es más o menos mi pensamiento también. Actualicé la pregunta para poder aclarar por qué estoy preguntando. Quiero esperar para ver si puedo obtener cualquier otra entrada antes de aceptar una respuesta. –