【发布时间】:2016-07-14 11:45:26
【问题描述】:
我最近看了今年的 WWDC GCD 演讲,我认为代码 sn-p 有问题。它是关于使用 DispatchQueues 使属性成为线程安全的。
class MyObject {
private var internalState: Int
private let internalQueue: DispatchQueue // Serial or Concurrent?
var state: Int {
get {
return internalQueue.sync { internalState }
}
set (newState) {
internalQueue.sync { internalState = newState }
}
}
}
他们使用 DispatchQueue 来锁定属性。但我认为这个 sn-p 无效,因为 internalQueue 可能是并发的。因此,如果我们从两个不同的 DispatchQueues/Threads 调用 setter,如果该内部队列不是串行的,也可能导致线程问题,对吧?因为在我的理解中,同步只是保持调用线程并在任务完成时继续。你觉得这个sn-p怎么样?我错了吗?
【问题讨论】:
-
是的,您可以将 internalQueue 定义为 serial 调度队列。
标签: swift grand-central-dispatch swift3