c-释放包含pthread_mutex_t的结构内存时,是否需要调用pthread_mutex_destroy



假设我有一个sruct:

typedef struct peer_info {
int ip;
int port;
int offset;
pthread_mutex_t mutex;
} peer_info;

然后我使用该结构并释放如下结构:

peer_info* p_info = (peer_info*)malloc(sizeof(peer_info));
pthread_mutex_init(&p_info->mutex, NULL);
/* do some work on the p_info */

// need I call the pthread_mutex_destory(&p_info->mutex); ?
free(p_info);

我检查了glibc ntpl souce代码,似乎我不需要显式调用pthread_mutex_destory(),因为pthread_mutex_t上没有分配memroy,这是一个联合类型。

是。如果您已经用pthread_mutex_init()初始化了互斥体,那么在释放内存之前,应该用pthread_mutex_destroy()销毁它。

POSIX标准考虑了互斥体完全驻留在pthread_mutex_t类型中的实现,以及该类型仅包括对某些外部分配的互斥体对象的引用的实现。pthread_mutex_init()由于各种资源耗尽的原因而被允许失败,这一事实加强了这一点。

在适当的情况下调用pthread_mutex_destroy()可以确保代码可移植到后一种实现。

我在Richard的APUE书中找到了答案。

互斥变量由pthread_mutex_t数据类型表示。在我们之前可以使用互斥变量,我们必须首先通过将其设置为常量来初始化它PTHREAD_MUTEX_INITIALIZER(仅用于静态分配的互斥(或调用pthread_mutex_init。如果我们动态地分配互斥(通过调用malloc例如(,那么我们需要在释放内存之前调用pthread_mutex_destroy。

相关内容

  • 没有找到相关文章

最新更新