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

q09*_*987 28 c++ pthreads

class AAA
{
    ...
    ~AAA()
    {
        pthread_mutex_lock( &m_mutex );
        pthread_mutex_destroy( &m_mutex );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

cam*_*ccc 35

它让我感到非常糟糕.

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

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

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

  • 为了完整起见,最新的手册页:http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_destroy.html (3认同)

Rup*_*av. 6

链接表示其未定义的行为.

也许从你看到这段代码的地方开始,原来的编码器想破坏互斥锁并且可能认为如果他/她能够锁定那个互斥锁,那么这意味着它被一些重要的线程解锁到其他地方,因此他可以删除它.

但它实施不正确.