未初始化的互斥锁超出范围 - 清理?

时间:2012-01-25 21:21:29

标签: c++ multithreading initialization pthreads mutex

我正在尝试清理其他人的代码,我发现很多情况下类包含pthread_mutex_t成员变量。在许多情况下,永远不会调用pthread_mutex_init(),也不会锁定/解锁。当该对象超出范围时,需要做什么(如果有的话)以便在它之后进行适当的清理?我可以尝试解锁它(如果它还没有初始化,会发生什么)?我需要销毁它吗?

分析工具说资源可能会丢失。什么都丢失了?

1 个答案:

答案 0 :(得分:1)

如果你正在进行清理并找到一个从未使用过的互斥锁,你应该考虑删除它。

如果使用互斥锁,则应拨打pthread_mutex_destroy()。类析构函数是一个很好的做法,尤其是在构造函数中调用pthread_mutex_init()时。

请注意,互斥锁必须在销毁时解锁,否则将导致未定义的行为。但是,这应该通过使用互斥锁的方式来确保。