标签:自己的 blog 相关信息 img data reads lan nal 问题
编译过程中链接了一个新的库。
?
也可以通过命令行来操作:
$ clang -fsanitize=thread source.c -o executable
$ swiftc -sanitize=thread source.swift -o executable
$ xcodebuild -enableThreadSanitizer YES
不支持设备,只支持模拟器!!! 如果在设备上运行,无法选中。
?
类似 vector clock 的技术。
对每 8 个字节,分配一个叫做 Shadow state 的东西,记录最多 4 个线程对这块内存的访问记录。
同时,每个线程存储一个结构,包括
?
线程 2 校验
此时比较 shadow 中线程 1 的时间戳信息和线程 2 中线程 1 的时间戳信息,发现没有问题,校验成功。
然后更新锁中关于线程 2 的信息,释放锁。
?
线程 3 访问
线程 3 访问时没有获取锁,而是直接写入内存。由于没有获取锁,所以线程 3 中关于其他线程的时间戳信息没有更新。在比较 shadow 中其他线程的时间戳信息时,发现 shadow 中的时间戳比线程 3 中的时间戳大,因此认为发生了 data race。
?
?
?
?
-Thread Sanitizer and Static Analysis - Valgrind Home - Vector Clock理解
WWDC: Thread Sanitizer and Static Analysis
标签:自己的 blog 相关信息 img data reads lan nal 问题
原文地址:http://www.cnblogs.com/huahuahu/p/WWDC-Thread-Sanitizer-and-Static-Analysis.html