假设我们使用静态初始化程序初始化了全局互斥锁或rwlock:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
或
pthread_rwlock_t lock = PTHREAD_RWLOCK_INITIALIZER;
文档说它与默认参数相当于pthread_*_init
。
我们是否必须销毁以这种方式初始化的互斥锁或rwlock?
答案 0 :(得分:6)
没有。静态分配和动态分配的互斥锁之间的差异基本上与位于堆栈或堆中的变量相当。你不必给你一个你没有动态分配的互斥量。 引自Michael Kerrisk" Linux编程接口":
当不再需要自动或动态分配的互斥锁时,应使用pthread_mutex_destroy()销毁它。 (没有必要在使用静态初始化的互斥锁上调用pthread_mutex_destroy() PTHREAD_MUTEX_INITIALIZER。)
答案 1 :(得分:0)
是。这些是初始化互斥锁的替代方法,但您只有一种方法可以完成它:pthread_*_destroy()
。
在Pthreads-w32实现中,应用程序仍应在某个时刻调用pthread_mutex_destroy,以确保释放互斥锁消耗的任何资源。
(这也是一个w32实现,我相信POSIX行为是一样的)
如果默认互斥锁属性合适,宏PTHREAD_MUTEX_INITIALIZER可用于初始化互斥锁。通过调用pthread_mutex_init()并将参数attr指定为NULL,效果应等效于动态初始化,但不执行错误检查。
如果效果相同,则应使用“镜像”功能pthread_mutex_destroy
。
另请参阅此相关SO Post