使用C ++,在我的一个析构函数中,我说
mutex = NULL;
然而,这会在我的Xcode中导致错误“No viable overloaded '='
”。
之前在构造函数中初始化了相同的互斥锁
mutex = PTHREAD_MUTEX_INITIALIZER;
请告知,我如何正确处理这个问题作为C ++析构函数的一部分
答案 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()
,因为宏形式更适合初始化而不是赋值。