我在C++程序中使用pthread_mutex_t,如下所示:
class Mutex : public noncopyable
{
public:
Mutex()
{
pthread_mutex_init(&m_mutex, NULL);
}
void acquire()
{
pthread_mutex_lock(&m_mutex);
}
void release()
{
pthread_mutex_unlock(&m_mutex);
}
private:
pthread_mutex_t m_mutex;
};
(该类不可复制 - http://www.boost.org/doc/libs/1_53_0/boost/noncopyable.hpp)
我不理解的问题是,在析构函数中不调用pthread_mutex_destroy
是否被认为是错误的?我阅读过的文档没有说明必须调用destroy。
有人知道pthread_mutex_destroy
实际上是做什么的以及在什么条件下需要使用吗?
编辑
pthread_mutex_destroy
的答案是否也适用于pthread_cond_destroy
等函数?它们对我来说似乎几乎没有用处,除非pthread_mutex_init
等函数正在分配内存(但对我来说,文档并不完全清晰)。
无论如何调用destroy不会对我造成伤害,所以这个问题在很大程度上是学术性的。
在Linux系统上,destroy似乎只将互斥量设置为无效状态:
int
__pthread_mutex_destroy (mutex)
pthread_mutex_t *mutex;
{
if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
&& mutex->__data.__nusers != 0)
return EBUSY;
/* Set to an invalid value. */
mutex->__data.__kind = -1;
return 0;
}
(来源于glibc-2.14 / nptl / pthread_mutex_destroy.c)。