0

这是一个代码片段(来自关于 GCD 的Aubrey Kate课程),它将使Xcode Thread sanitizer(AKA 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 需要该Thread.sleep功能才能找到data race它,而没有它,它就无法定位。

4

0 回答 0