- Hands-On Design Patterns with Swift
- Florent Vilmart Giordano Scalzo Sergio De Simone
- 180字
- 2021-07-02 14:45:11
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.
- 數(shù)據(jù)浪潮
- Microsoft SQL Server企業(yè)級平臺管理實踐
- Test-Driven Development with Mockito
- 輕松學大數(shù)據(jù)挖掘:算法、場景與數(shù)據(jù)產(chǎn)品
- Developing Mobile Games with Moai SDK
- Oracle RAC 11g實戰(zhàn)指南
- Access 2016數(shù)據(jù)庫技術及應用
- Mastering Machine Learning with R(Second Edition)
- Dependency Injection with AngularJS
- 智能數(shù)據(jù)時代:企業(yè)大數(shù)據(jù)戰(zhàn)略與實戰(zhàn)
- MATLAB Graphics and Data Visualization Cookbook
- 大數(shù)據(jù)治理與安全:從理論到開源實踐
- 一本書講透Elasticsearch:原理、進階與工程實踐
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 數(shù)據(jù)分析師養(yǎng)成寶典