Swfit - Dispath信号量枷锁

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更安全

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容