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后面应该没这个问