ASAN ThreadSanitizer定位多线程(资源管理)
ThreadSanitizer又叫TSan,是一个检查线程Data Race的C/C++工具。
1,环境部署参考上一篇文章。
2,多线程资源互斥示例代码
#include <pthread.h>
#include <stdio.h>
int global;
void *test_thread1(void *x) {
global++;
return NULL;
}
void *test_thread2(void *x) {
global--;
return NULL;
}
int main() {
pthread_t t[2];
pthread_create(&t[0], NULL, test_thread1, NULL);
pthread_create(&t[1], NULL, test_thread2, NULL);
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
}
编译:
lark@ubuntu:~/test$ gcc main2.c -fsanitize=thread -fPIE -pie -g
/usr/bin/ld: cannot find libtsan_preinit.o: No such file or directory
这个时ubuntu20.04上面的问题,22.04后面应该没这个问