从Objective-C到Swift中@synchronized的等价物:正确的线程同步
大家好!我最近刚从Objective-C转到Swift,遇到了从不同线程同步访问共享数据的问题。在Objective-C中,我习惯使用简单的结构:
```objc
@synchronized(self) {
// 临界区
self.someProperty = newValue;
}
```
它保证了同一时间只有一个线程执行块内的代码。在Swift中没有这样的语法。我知道Swift中有GCD(Grand Central Dispatch),但不确定如何正确组织同步。
问题:我有一个缓存类,多个线程会访问它。以下是简化版本:
```swift
class Cache {
private var storage: [String: Any] = [:]
func set(value: Any, forKey key: String) {
storage[key] = value
}
func get(forKey key: String) -> Any? {
return storage[key]
}
}
```
当多个线程并发访问时,会发生数据竞争(data race)。如何正确实现