【发布时间】:2021-08-20 08:11:05
【问题描述】:
假设我有一个结构:
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 源代码,似乎我不需要显式调用pthread_mutex_destory(),因为pthread_mutex_t 上没有分配内存,这是一个联合类型。
【问题讨论】:
-
如果
pthread_mutex_init进行一些动态分配或以其他方式创建或分配某种资源会怎样?如果您不调用pthread_mutex_destory,该资源将如何变得未分配或销毁?仅仅因为一个非常具体的实现没有做到这一点,并不意味着所有的实现都一样。 -
@Someprogrammerdude 老兄,它不分配内存。检查code.woboq.org/userspace/glibc/nptl/pthread_mutex_init.c.html
-
再一次,一个特定的实现并不意味着所有的实现都一样。
-
@Someprogrammerdude 假设它不分配内存,不调用 pthread_mutex_destory() 是否安全?
-
Re "让我们假设它不分配内存",这样就不安全了。它可以分配其他种类的资源。其他互斥操作仍然可以分配内存或其他类型的资源。