CONC.SLEEP
调用关键部分的阻止函数
CONC.SLEEP 检查器可查找代码的关键部分中的阻止函数实例。
漏洞与风险
执行阻止函数前,锁定不会释放并且其他线程可能被阻止。这些情况可能导致意外行为,因此最好避免调用阻止函数。
漏洞代码示例
复制
#include <pthread.h>
void foo(pthread_mutex_t *mutex) {
pthread_mutex_lock(mutex);
sleep(30000);
pthread_mutex_unlock(mutex);
}
Klocwork 标记了第 5 行,指出当互斥在第 4 行被锁定时,对阻止函数的调用进入了睡眠状态。
相关检查器
扩展
此检查器可进行扩展。相关的知识库记录类型包括:
- CONC.LOCK
- CONC.LOCK.TRY
- CONC.UNLOCK
- CONC.CONDSIGNAL
- CONC.CONDWAIT
有关详情,请参阅调整 C/C++ 分析。