Xcode Thread Sanitizer进行数据竞争检测的意外行为

问题描述

这是一个代码段(来自 Aubrey Kate 关于GCD的课程),它将使#include "zip.h" #include "gtk.h" zip_t *mainzipfile = zip_open(g_file_get_path(file),ZIP_CHECKCONS,&error); zip_file_t *childzip = zip_fopen(mainzipfile,"child.zip",ZIP_RDONLY);// this segfaults zip_file_t *childofchild = zip_fopen_index((zip_t*)childzip,1,ZIP_RDONLY); Xcode(又名Thread sanitizer)-检测到{{ 1}}:

TSan

但是,如果我注释掉Data race-import UIKit final class MainViewController: UIViewController { var counter = 0 override func viewDidLoad() { super.viewDidLoad() let queue = dispatchQueue(label: "q") queue.async { for _ in 1 ... 10000 { Thread.sleep(forTimeInterval: 0.1) self.counter += 1 } } dispatchQueue.main.async { for _ in 1 ... 10000 { self.counter += 1 } } } } 没有任何帮助,并且不会使程序崩溃。

我的问题是Thread.sleep(forTimeInterval: 0.1)无法检测到数据竞争的本质变化是什么???为什么TSan需要TSan函数才能找到TSan,而没有它,它就无法运行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)