为什么要破坏pthread_cond_t和pthread_mutex_t?

时间:2013-04-10 11:28:48

标签: c multithreading pthreads posix

如果在线程代码中,我在C中创建了一个pthread_cond_t c;条件变量或一个互斥pthread_mutex_t m;,建议在完成所有工作后销毁它们。

为什么会这样?

如果使用cond函数动态初始化pthread_cond_init();变量,为什么最好销毁{{1}}变量。

引用David Butenhof" 用POSIX线程编程"

  

"当您动态初始化条件变量时,您应该这样做   当你不再需要它时,通过调用来销毁条件变量   pthread_cond_destroy.You不需要销毁条件变量   使用PTHREAD_COND_INITIALIZER静态初始化   宏"

1 个答案:

答案 0 :(得分:8)

pthread_cond_t和pthread_mutex_t被视为资源。

完成后,您需要销毁/清理/关闭资源,就像您需要关闭文件或释放内存时一样。 如果不这样做会导致资源泄漏,您可能会耗尽这些资源。

将这些作为资源处理使得实现更加自由地实现它们,并且在某些特定实现上,忘记_destroy()它们可能没有坏处,其他人可能将mutex / condition变量连接到内核资源当你不再需要时需要清理它。 pthread_mutex_init的基本原理部分提供了更多概述,同样适用于条件变量

如果使用PTHREAD_COND_INITIALIZER初始化条件变量,则应该初始化静态分配的互斥锁,即它将一直存在直到应用程序结束,此时它将被系统销毁,可能是作者的意思。这适用于动态初始化的互斥锁/ cond变量,系统也会清理它们。

当应用程序结束时,大多数资源会自动清理,因此,在这种情况下手动清理所有内容还是让系统执行此操作是否是一种好习惯是另一种讨论。