2017-06-04 1 views
5

Betrachten Sie den folgenden Code ein:Kann ich ein Mutexattr-Objekt zerstören, bevor der Mutex, der mit diesem Mutexattr initialisiert wurde, benutzt wird?

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

Ist dieser Code gültig?

Wenn der Mutex Verweise auf das Attributobjekt enthalten darf, mit dem er initialisiert wurde, dann nehme ich an, dass ich vor der Verwendung des Mutex pthread_mutexattr_destroy(&attr) nicht aufrufen darf.

Antwort

6

Wie die manual sagen:

Nachdem ein Mutex-Objekt-Attribute verwendet worden einen oder mehr mutexes zu initialisieren, jede Funktion der Attribute Objekt (einschließlich Vernichtung) nicht beeinträchtigt, wird all zuvor initialisiert mutexes nicht beeinflussen.

So ist Ihr Code gültig (aber vergessen Sie nicht, den möglichen Fehler dieser Funktionen zu überprüfen).

Verwandte Themen