class AAA
{
...
~AAA()
{
pthread_mutex_lock( &m_mutex );
pthread_mutex_destroy( &m_mutex );
}
}
问题>我在项目的某处看到了这段代码。这样做是好的做法吗? 或者在销毁互斥锁之前锁定互斥锁是不确定的行为?
答案 0 :(得分:35)
这让我感到非常可怕。
来自http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_destroy.html
销毁已解锁的初始化互斥锁应该是安全的。试图销毁锁定的互斥锁会导致未定义的行为。
所以这段代码保证了未定义的行为,需要修复。
答案 1 :(得分:6)
此link表示其未定义的行为。
也许从你看到这段代码的地方开始,原始程序员想要销毁互斥锁并且可能认为如果他/她能够锁定该互斥锁,那么这意味着它被某个重要线程解锁到其他地方,从而他可以删除它。
但它实施不正确。