6

pthread 属性对象是否需要在使用它们的对象的生命周期内存在,或者在使用它们后立即销毁它们是否安全?例如:

// Create the mutex attributes.
pthread_mutexattr_t attributes;
pthread_mutexattr_init( &attributes );
pthread_mutexattr_settype( &attributes, PTHREAD_MUTEX_NORMAL );

// Create the mutex using the attributes from above.
pthread_mutex_t mutex;
pthread_mutex_init( &mutex, &attributes );

现在可以使用 pthread_mutexattr_destroy() 安全地销毁属性,还是需要等到使用 pthread_mutex_destroy() 销毁互斥体之后?

这同样适用于使用属性的其他 pthread 对象吗?

4

1 回答 1

9

http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutexattr_init.html

在使用互斥体属性对象初始化一个或多个互斥体后,任何影响属性对象(包括销毁)的函数都不应影响任何先前初始化的互斥体。

因此,在创建互斥锁后销毁 mutexattr 对象是非常安全的。

于 2012-06-16T09:39:42.053 回答