为什么要破坏pthread_cond_t和pthread_mutex_t?

Suv*_*yil 6 c multithreading posix pthreads

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

为什么会这样?

另外,为什么在cond使用pthread_cond_init();函数动态初始化变量时必须销毁变量.

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

"当你动态初始化一个条件变量时,你应该在你不再需要它时通过调用pthread_cond_destroy来销毁条件变量.你不需要销毁一个使用PTHREAD_COND_INITIALIZER宏静态初始化的条件变量"

nos*_*nos 9

pthread_cond_t和pthread_mutex_t被视为资源.

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

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

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

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