在销毁 pthread 互斥锁之前锁定它是否是一种好习惯

Is it good practice to lock a pthread mutex before destroying it?

本文关键字:是否是 好习惯 一种 锁定 pthread      更新时间:2023-10-16
class AAA
{
    ...
    ~AAA()
    {
        pthread_mutex_lock( &m_mutex );
        pthread_mutex_destroy( &m_mutex );
    }
}

问题>我在项目中的某个地方看到了这段代码。这样做是好的做法吗?还是在销毁互斥锁之前锁定互斥锁是未定义的行为?

这让我感到非常糟糕。

与 http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_destroy.html 相比

销毁已解锁的初始化互斥锁应该是安全的。尝试销毁锁定的互斥锁会导致未定义的行为。

因此,此代码保证了未定义的行为,需要修复。

此链接表示其未定义的行为。

也许从你看到这段代码的地方,最初的编码人员想要销毁互斥锁,并且可能认为如果他/她能够锁定该互斥锁,那么这意味着它被一些重要的线程在其他地方解锁,因此他可以删除它。

但它的实现不正确。