2017-06-04 12 views
5

Consultez le code suivant:Puis-je détruire un objet mutexattr avant que le mutex initialisé avec ce mutexattr ne soit utilisé?

pthread_mutexattr_t attr; 
pthread_mutexattr_init(&attr); 
pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST); 

pthread_mutex_t mut; 
pthread_mutex_init(&mut, &attr); 

pthread_mutexattr_destroy(&attr); 

pthread_mutex_lock(&mut); 

Est-ce code valide?

Si le mutex est autorisé à contenir des références à l'objet d'attribut avec lequel il a été initialisé, alors je suppose que je ne peux pas appeler pthread_mutexattr_destroy(&attr) avant d'utiliser le mutex.

Répondre

6

Comme le disent manual:

Après un mutex les attributs d'objet a été utilisé pour initialiser un ou plusieurs mutex, une fonction affectant les attributs d'objet (y compris la destruction) ne porte pas atteinte mutex précédemment initialisées.

Votre code est donc valide (mais n'oubliez pas de vérifier l'erreur potentielle de ces fonctions).