如何正确删除互斥锁?

时间:2011-05-28 01:16:38

标签: c++ pthreads posix mutex

使用C ++,在我的一个析构函数中,我说

mutex = NULL;

然而,这会在我的Xcode中导致错误“No viable overloaded '='”。

之前在构造函数中初始化了相同的互斥锁

mutex = PTHREAD_MUTEX_INITIALIZER;

请告知,我如何正确处理这个问题作为C ++析构函数的一部分

3 个答案:

答案 0 :(得分:5)

您可以使用pthread_mutex_destroy()销毁互斥锁​​对象。

根据POSIX规范:

  

pthread_mutex_destroy()函数   应该销毁互斥对象   互斥引用;互斥对象   实际上,变得没有初始化。一个   实施可能会导致   pthread_mutex_destroy()来设置   互斥引用的对象   无效值。被破坏的互斥体   对象可以使用重新初始化   调用pthread_mutex_init();结果   否则引用后的对象   它被摧毁是未定义的。

答案 1 :(得分:3)

没有必要在静态分配的互斥锁上使用pthread_mutex_destroy。如果在堆栈或堆上分配了互斥锁,则应使用pthread_mutex_init和pthread_mutex_destroy。最重要的是确保在销毁之前解锁互斥锁。

答案 2 :(得分:2)

正如巴克斯所说,使用pthread_mutex_destroy()。如果互斥锁是C ++类的成员,我想知道为什么用PTHREAD_MUTEX_INITIALIZER初始化它,而不是使用pthread_mutex_init(),因为宏形式更适合初始化而不是赋值。