2017-06-04 28 views
5

Hãy xem xét mã sau:Tôi có thể phá hủy một đối tượng mutexattr trước khi mutex được khởi tạo với mutexattr này được sử dụng không?

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

Mã này có hợp lệ không?

Nếu mutex được phép chứa tham chiếu đến đối tượng thuộc tính được khởi tạo, thì tôi giả sử tôi không thể gọi pthread_mutexattr_destroy(&attr) trước khi sử dụng mutex.

Trả lời

6

Giống như manual nói:

Sau một mutex thuộc tính đối tượng đã được sử dụng để khởi tạo một hoặc nhiều mutexes, bất kỳ chức năng ảnh hưởng đến đối tượng các thuộc tính (bao gồm việc hủy) sẽ không ảnh hưởng đến bất kỳ mutexes khởi tạo trước đó.

Vì vậy, mã của bạn hợp lệ (nhưng đừng quên kiểm tra lỗi tiềm ẩn của các chức năng này).

Các vấn đề liên quan