在pthread_mutex_destroy之后我是否需要使用delete

时间:2011-07-30 12:14:14

标签: c++ multithreading pthreads

假设我使用

pthread_mutex_t *m = new pthread_mutex_t;
pthread_mutex_init(m, NULL);

初始化互斥锁。在我完成之后,调用pthread_mutex_destroy,我是否需要使用

delete m;

发布所有资源?

2 个答案:

答案 0 :(得分:6)

您需要释放内存,因为 pthread_mutex_destroy无法为您执行此操作

为什么pthread_mutex_destroy没有为你释放内存?因为你被允许这样做:

pthread_mutex_t m;
pthread_mutex_init(&m, NULL);

pthread_mutex_destroy(&m); /* Can't free &m. */

您可以使用valgrind

进行尝试
==836== LEAK SUMMARY:
==836==    definitely lost: 24 bytes in 1 blocks

答案 1 :(得分:2)

使用pthread_mutex_init初始化互斥锁是不同的方面;并且为对象(类型pthread_mutex_t)分配的内存是不同的方面。

使用某些库的初始化例程与在堆上或堆栈上为其分配内存不同。这就像有一个FILE *作为局部变量,并使用fopen

初始化文件指针