6

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

为什么会这样?

cond另外,如果使用pthread_cond_init();函数动态初始化变量,为什么最有必要销毁变量。

引用 David Butenhof “使用 POSIX 线程编程

“当您动态初始化条件变量时,您应该在不再需要时销毁条件变量,方法是调用 pthread_cond_destroy。您不需要销毁使用 PTHREAD_COND_INITIALIZER 宏静态初始化的条件变量”

4

1 回答 1

9

pthread_cond_t 和 pthread_mutex_t 被视为资源。

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

将这些视为资源使实现在如何实现它们方面有更大的自由,并且在某些特定的实现中,忘记 _destroy() 它们可能没有害处,其他可能会将互斥/条件变量连接到需要的内核资源不再需要时清理。pthread_mutex_init的基本原理部分提供了更多概述,这同样适用于条件变量

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

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

于 2013-04-10T11:50:17.497 回答