我在 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
等。人。正在分配内存?(对我来说,文档对此并不完全清楚。)
无论如何,调用破坏并没有伤害我,所以这个问题主要是学术性的。
无论如何,在 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)。