c++ - pthread_join - pthread_mutex_lock
¿Es una buena práctica bloquear un mutex pthread antes de destruirlo? (2)
Este link dice su comportamiento indefinido.
Tal vez desde donde vio este código, el codificador original quería destruir el mutex y podría haber pensado que si él / ella podría bloquear ese mutex, eso significa que está desbloqueado en algún otro lugar por algún hilo importante, y por lo tanto puede eliminar eso.
Pero está implementado incorrectamente.
Esta pregunta ya tiene una respuesta aquí:
class AAA
{
...
~AAA()
{
pthread_mutex_lock( &m_mutex );
pthread_mutex_destroy( &m_mutex );
}
}
Pregunta> Vi este código en algún lugar de un proyecto. ¿Es una buena práctica hacerlo? ¿O es un comportamiento indefinido bloquear un mutex antes de destruirlo?
Me parece una práctica absolutamente terrible.
de http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_destroy.html
Será seguro destruir un mutex inicializado que esté desbloqueado. Intentar destruir un mutex bloqueado da como resultado un comportamiento indefinido.
por lo que este código garantiza un comportamiento indefinido y necesita ser arreglado.