Swift学习笔记

Swfit - Dispath信号量枷锁

2022-05-15  本文已影响0人  aven_kang
public struct Cache {
    
    private static var data = [String:Any]()
    
    private static var lock = DispatchSemaphore(value: 1)
    
    public static func get(_ key:String) -> Any? {
        
        data[key]
        
    }
    
    public static func set(_ key:String,_ value:Any) {
        
        lock.wait()
        
        defer {
            lock.signal()
        }
        data[key] = value
        
    }
}

创建了一个信号量DispatchSemaphore(value: 1),一次只能执行一次,在需要上锁的地方lock.wait(),一般来说,在事情做完之后,需要解锁的,lock.signal(),但是为了安全起见,data[key] = value这个可能赋值失败,如果lock.signal()写在data[key] = value之后,可能就无法执行了,所以使用defer更安全

上一篇 下一篇

猜你喜欢

热点阅读