【发布时间】:2013-01-21 04:31:16
【问题描述】:
我在一个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)
我不明白的事情 - not 在析构函数中调用 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)。
【问题讨论】:
-
备注 this windows 实现需要销毁:sourceware.org/pub/pthreads-win32/sources/… 而 this one locklessinc.com/articles/pthreads_on_windows 不需要。