官术网_书友最值得收藏!

Thread safety through serial queues

Sometimes, in your code, you want to guarantee that no two concurrent threads will write to the same memory. You can use the @synchronized(self) section in Objective-C, but in Swift, you can leverage Dispatch and serial queues. As you saw in the previous section, the execution order will be preserved, as well as additional guarantees that the previous task enqueued on a serial queue will be completed before the next one starts.

You can ensure that access to the balance property of CreditCard is thread-safe, which guarantees that no other thread or code is writing while you are reading the value:

class CreditCard {
private let queue = DispatchQueue(label: "synchronization.queue")
private var _balance: Int = 0
var balance: Int {
get {
return queue.sync { _balance }
}
set {
queue.sync { _balance = newValue }
}
}
}

In the preceding example, we use a shadow variable (balance) to provide public access to the underlying _balance. The shadow variable will guarantee that the _balance object/variable will always be accessed in a thread safe manner.

主站蜘蛛池模板: 兖州市| 台北县| 乌恰县| 日土县| 阿拉尔市| 东丽区| 林甸县| 凤台县| 宜春市| 固镇县| 大丰市| 扎兰屯市| 正镶白旗| 资阳市| 南川市| 云梦县| 崇义县| 大安市| 桑日县| 紫金县| 桃源县| 齐齐哈尔市| 定兴县| 汨罗市| 图木舒克市| 怀集县| 华池县| 胶南市| 玉门市| 汉阴县| 蚌埠市| 赣州市| 平远县| 双流县| 天峻县| 车致| 安溪县| 老河口市| 遂昌县| 登封市| 潮州市|