1
public class Account {
// MARK: Initializer
// Custom initializer
// MARK: Stored Properties
let concurrentQueue: DispatchQueue = DispatchQueue(
label: "concurrentQueue",
qos: DispatchQoS.userInitiated,
attributes: [DispatchQueue.Attributes.concurrent]
)
private var _name: String
public name: String {
get {
return self.concurrentQueue.sync { return self._name }
}
set {
self.concurrentQueue.async(flags: .barrier) {
self._name = newValue
}
}
}
}
假設你有一個像上面那樣想要線程安全的類。在Swift中創建線程安全讀取時,爲什麼在併發隊列外創建一個變量?
Account
這個類的getter與定義這樣的getter有什麼區別?
get {
var result: String!
self.concurrentQueue.sync { result = self._name }
return result
}
我目前正在圍繞線程安全進行包裝,並且總是看到像後者一樣創建的讀取。在我看來,他們幾乎是一樣的...我錯了嗎?
來源:GCD Tutorial
後者僅僅是實現前者更令人費解的版本 – Alexander