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

时间:2014-11-07 19:27:54

标签: c++ pthreads

class AAA
{
    ...
    ~AAA()
    {
        pthread_mutex_lock( &m_mutex );
        pthread_mutex_destroy( &m_mutex );
    }
}

问题>我在项目的某处看到了这段代码。这样做是好的做法吗? 或者在销毁互斥锁​​之前锁定互斥锁是不确定的行为?

2 个答案:

答案 0 :(得分:35)

这让我感到非常可怕。

来自http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_destroy.html

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

所以这段代码保证了未定义的行为,需要修复。

答案 1 :(得分:6)

link表示其未定义的行为。

也许从你看到这段代码的地方开始,原始程序员想要销毁互斥锁​​并且可能认为如果他/她能够锁定该互斥锁,那么这意味着它被某个重要线程解锁到其他地方,从而他可以删除它。

但它实施不正确。