【发布时间】:2017-10-02 03:42:20
【问题描述】:
我有以下代码,据我了解,它应该在_predictions 上提供线程安全读写。我的isolationQueue 是一个并发队列,需要保持不变。我在这个队列上调用多个独立的异步操作来计算各种图像的预测。各种调用之间唯一共享的项目是设置预测的时间。
var isolationQueue = DispatchQueue.global(qos: .default)
var _predictions: [Int:[Prediction]] = [:]
var predictions:[Int: [Prediction]] {
get {
var result: [Int: [Prediction]]!
isolationQueue.sync {
result = _predictions
}
return result
}
set(value) {
isolationQueue.sync {
self._predictions = value
}
}
}
但是由于某种原因,Thread Sanitizer 似乎检测到 getter 和 setter 之间的竞争情况。
我错过了什么吗?
【问题讨论】:
-
isolationQueue 是如何定义的?它是 serial 调度队列吗?
-
更新了问题。它是全球性的,因此我相信它会同时发生。
var isolationQueue = DispatchQueue.global(qos: .default)
标签: ios swift grand-central-dispatch swift4