在销毁 pthread 互斥锁之前锁定它是否是一种好习惯
Is it good practice to lock a pthread mutex before destroying it?
class AAA
{
...
~AAA()
{
pthread_mutex_lock( &m_mutex );
pthread_mutex_destroy( &m_mutex );
}
}
问题>我在项目中的某个地方看到了这段代码。这样做是好的做法吗?还是在销毁互斥锁之前锁定互斥锁是未定义的行为?
这让我感到非常糟糕。
与 http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_destroy.html 相比
销毁已解锁的初始化互斥锁应该是安全的。尝试销毁锁定的互斥锁会导致未定义的行为。
因此,此代码保证了未定义的行为,需要修复。
此链接表示其未定义的行为。
也许从你看到这段代码的地方,最初的编码人员想要销毁互斥锁,并且可能认为如果他/她能够锁定该互斥锁,那么这意味着它被一些重要的线程在其他地方解锁,因此他可以删除它。
但它的实现不正确。
相关文章:
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 派生类是单例是否是一种好的做法
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?
- 让二传手返回布尔值是好习惯吗?
- 在同一C 源文件中使用多个名称空间是一个好习惯吗?
- 是聪明的指针是RAII的好习惯
- 使用 stl 迭代器封装向量是否很好?如果是?怎么可能呢?
- 使用 move-constructor 时将 self 重置为 nullptr 是一个好习惯吗?
- 从 r 值引用限定方法返回 r 值引用是否是一种好的做法?
- 将指针施放为成员函数作为C函数的指针是一个好习惯吗?
- 如果要调用多个成员函数,对象编辑器是否是一种好方法?
- 使用此"shortcutting function"是否是一种好的做法?
- 重建operator()是重建的好习惯
- 在每个可能的地方使用指针是否是一种好习惯
- 在销毁 pthread 互斥锁之前锁定它是否是一种好习惯