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

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.

主站蜘蛛池模板: 镇沅| 台前县| 凤冈县| 奈曼旗| 托克逊县| 遂昌县| 图木舒克市| 岫岩| 弥勒县| 景谷| 交城县| 栾城县| 阿图什市| 新野县| 新巴尔虎左旗| 房山区| 临江市| 崇文区| 嵩明县| 隆尧县| 广西| 宜城市| 当雄县| 富平县| 长宁区| 大冶市| 白银市| 庐江县| 弥勒县| 房山区| 连山| 湖口县| 东乌珠穆沁旗| 方正县| 浦江县| 南康市| 张家港市| 富民县| 将乐县| 闵行区| 宜君县|