2017-06-04 73 views
5

Rozważmy następujący kod:Czy mogę zniszczyć obiekt mutexattr zanim użyty zostanie mutex, który został zainicjowany przy użyciu tego mutexattr?

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

ważny jest ten kod?

Jeśli muteks może zawierać odniesienia do obiektu atrybutu, z którym został zainicjalizowany, to przypuszczam, że nie mogę zadzwonić pod numer pthread_mutexattr_destroy(&attr) przed użyciem muteksu.

Odpowiedz

6

Jak manual powiedzieć:

Po atrybutów obiektu mutex został wykorzystany, aby zainicjować jeden lub więcej muteksy, każda funkcja wpływa atrybuty obiektów (w tym zniszczenie) nie narusza żadnych poprzednio zainicjowane muteksy.

Twój kod jest ważny (ale nie zapomnij sprawdzić potencjalnego błędu tych funkcji).