gpt4 book ai didi

c - 是否有用于 C 的静态代码检查器会标记缺少的互斥锁解锁?

转载 作者:行者123 更新时间:2023-12-01 15:19:34 25 4
gpt4 key购买 nike

<分区>

在下面的代码中,两个线程使用同一个函数,每个线程都应该在启动前获取锁。所以第一个线程获得锁,完成工作,然后离开,但没有释放锁,因为解锁命令被故意注释掉了。第二个线程永远不会获得锁,因此永远不会完成这项工作。

我创建这个简单的示例只是为了测试我正在使用的静态代码检查器是否会标记这种情况(缺少解锁),而它不会。我正在使用 CodeChecker它有 clang 静态分析器和 clang-tidy 检查器。你知道任何会标记这个的静态代码检查器吗?我认为 Coverity 可以,但我没有证明这一点的许可证。

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>

pthread_t tid[2];
int counter;
pthread_mutex_t lock;

void* doSomeThing() {
pthread_mutex_lock(&lock);

unsigned long i = 0;
counter += 1;
printf("\n Job %d started\n", counter);

for(i=0; i<(0xFFFFFFF);i++);

printf("\n Job %d finished\n", counter);

// pthread_mutex_unlock(&lock);

return NULL;
}

int main(void) {
int i = 0;
int err;

if (pthread_mutex_init(&lock, NULL) != 0) {
printf("\n mutex init failed\n");
return 1;
}

while(i < 2) {
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
i++;
}

pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);
pthread_mutex_destroy(&lock);

return 0;
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com