如何正确删除互斥体?

发布于 2024-11-10 04:57:40 字数 245 浏览 6 评论 0原文

使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

噩梦成真你也成魔 2024-11-17 04:57:40

您可以使用 pthread_mutex_destroy() 来销毁互斥对象。

根据 POSIX 规范:

pthread_mutex_destroy()函数
应销毁互斥对象
由互斥量引用;互斥对象
实际上,变得未初始化。一个
实施可能会导致
pthread_mutex_destroy() 设置
互斥体引用的对象
无效值。被破坏的互斥锁
对象可以使用重新初始化
pthread_mutex_init();结果
否则引用之后的对象
它已被销毁未定义。

You may use pthread_mutex_destroy() to destroy the mutex object.

According to the POSIX specification:

The pthread_mutex_destroy() function
shall destroy the mutex object
referenced by mutex; the mutex object
becomes, in effect, uninitialized. An
implementation may cause
pthread_mutex_destroy() to set the
object referenced by mutex to an
invalid value. A destroyed mutex
object can be reinitialized using
pthread_mutex_init(); the results of
otherwise referencing the object after
it has been destroyed are undefined.

一场春暖 2024-11-17 04:57:40

没有必要对静态分配的互斥体使用 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.

遗失的美好 2024-11-17 04:57:40

正如巴克斯所说,使用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 with PTHREAD_MUTEX_INITIALIZER, rather than using pthread_mutex_init(), as the macro form is more suited for initialization rather than assignment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文