如何正确删除互斥体?
使用 C++,在我的一个析构函数中,我说
mutex = NULL;
这会导致我的 Xcode 中出现错误“没有可行的重载'='
”。
之前在构造函数中初始化了相同的互斥锁,
mutex = PTHREAD_MUTEX_INITIALIZER;
请告知,我如何正确处理它作为 C++ 析构函数的一部分
Using C++, in one of my destructors, i say
mutex = NULL;
This however results in an error "No viable overloaded '='
" in my Xcode.
Same mutex was previously initialized in a constructor as
mutex = PTHREAD_MUTEX_INITIALIZER;
Please advise, how can i properly handle this as part of C++ destructor
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 pthread_mutex_destroy() 来销毁互斥对象。
根据 POSIX 规范:
You may use
pthread_mutex_destroy()
to destroy the mutex object.According to the POSIX specification:
没有必要对静态分配的互斥体使用 pthread_mutex_destroy。如果您的互斥体分配在堆栈或堆上,您应该使用 pthread_mutex_init 和 pthread_mutex_destroy。最重要的是确保互斥锁在销毁之前已解锁。
It is not necessary to use pthread_mutex_destroy on a staticly allocated mutex. If your mutex is allocated on the stack or heap you should be using pthread_mutex_init and pthread_mutex_destroy. And most importantly make sure the mutex is unlocked before destruction.
正如巴克斯所说,使用pthread_mutex_destroy()。如果互斥锁是 C++ 类的成员,我想知道为什么使用 PTHREAD_MUTEX_INITIALIZER 初始化它,而不是使用 pthread_mutex_init() ,因为宏形式更适合初始化而不是赋值。
As bacchus said, use
pthread_mutex_destroy()
. If the mutex is a member of a C++ class, I wonder why you initialized it withPTHREAD_MUTEX_INITIALIZER
, rather than usingpthread_mutex_init()
, as the macro form is more suited for initialization rather than assignment.