【发布时间】:2019-01-15 08:57:00
【问题描述】:
Cppcheck 有没有办法检查互斥锁/解锁功能?
一个例子(有错误):
void foo() {
mutex_lock();
if (condition) { // condition is true
return;
}
mutex_unlock();
}
有没有办法 Cppcheck 可以检测到这样的问题(互斥锁保持锁定)?
【问题讨论】:
Cppcheck 有没有办法检查互斥锁/解锁功能?
一个例子(有错误):
void foo() {
mutex_lock();
if (condition) { // condition is true
return;
}
mutex_unlock();
}
有没有办法 Cppcheck 可以检测到这样的问题(互斥锁保持锁定)?
【问题讨论】:
不,目前不支持检查锁定/解锁功能。
您似乎也在 Cppcheck 论坛中提出了这个问题,那里已经有反馈: https://sourceforge.net/p/cppcheck/discussion/development/thread/a7b82c3e/
Daniel Marjamäki 的回答中描述了当前可以使用的最佳解决方法: https://sourceforge.net/p/cppcheck/discussion/development/thread/a7b82c3e/#f237 它建议使用 Cppcheck 已经支持的包装函数和分配/释放检查。
【讨论】:
您可以使用 PVS-Studio 分析器检测此错误。将针对以下代码发出V1020 诊断:V1020 函数退出而未调用“mutex_unlock”函数。检查行:20、18.test.cpp。
这是一个经验诊断,它试图根据函数名称找出代码的工作方式。
【讨论】: