2011-05-28 370 views
3

使用C++,在我的析构函数中的一个,我说如何正确删除互斥锁?

mutex = NULL; 

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

同一个互斥以前初始化在构造函数

mutex = PTHREAD_MUTEX_INITIALIZER; 

请指教,我如何能够妥善处理这是C++的析构函数

+0

您可以使用'pthread_mutex_destroy()'销毁互斥对象。 – bacchus 2011-05-28 01:25:21

+0

@Bacchus,这应该是一个答案,所以我可以upvote它。 :) – sarnold 2011-05-28 01:30:45

+0

@Bachhus请“回答”,所以我可以给你信用 – JAM 2011-05-28 01:31:40

回答

5

的一部分,您可以使用pthread_mutex_destroy()破坏互斥对象。

按照POSIX规格:

的pthread_mutex_destroy()函数 应销毁mutex引用互斥对象 ;互斥对象 实际上变为未初始化。 实现可能导致 pthread_mutex_destroy()将互斥体引用的对象 设置为 无效值。可以使用 pthread_mutex_init()重新初始化被销毁的互斥对象 ; 否则引用 之后的对象的结果是未定义的。

+1

+1。原始尝试不起作用的原因当然是'NULL'不是'pthread_mutex_t'(并且没有可行的转换)。 – 2011-05-28 01:36:03

2

正如bacchus所说,使用pthread_mutex_destroy()。如果互斥量是C++类的成员,我想知道为什么您使用PTHREAD_MUTEX_INITIALIZER而不是使用pthread_mutex_init()来初始化它,因为宏窗体更适合于初始化而非分配。

3

不需要在静态分配的互斥体上使用pthread_mutex_destroy。如果你的互斥体被分配到堆栈或堆上,你应该使用pthread_mutex_init和pthread_mutex_destroy。最重要的是确保互斥体在破坏之前解锁。