Swift - 锁

作者: aven_kang | 来源:发表于2022-05-15 13:53 被阅读0次

NSLock

public struct Cache {
    
    private static var data = [String:Any]()
    
//    private static var lock = DispatchSemaphore(value: 1)
    private static var lock = NSLock()
    
    public static func get(_ key:String) -> Any? {
        
        data[key]
        
    }
    
    public static func set(_ key:String,_ value:Any) {
        
        lock.lock()
        
        defer {
            lock.unlock()
        }
        data[key] = value
        
    }
}

NSRecursiveLock

递归锁

public struct Cache {
    
    private static var data = [String:Any]()
    
//    private static var lock = DispatchSemaphore(value: 1)
//    private static var lock = NSLock()
    private static var lock = NSRecursiveLock()
    
    public static func get(_ key:String) -> Any? {
        
        data[key]
        
    }
    
    public static func set(_ key:String,_ value:Any) {
        
        lock.lock()
        
        defer {
            lock.unlock()
        }
        data[key] = value
        
    }
}

当发生自己调用自己的时候,或者递归的时候,需要使用递归锁NSRecursiveLock,用法跟NSLock是一样的,只是使用场景可能不一样。

相关文章

网友评论

    本文标题:Swift - 锁

    本文链接:https://www.haomeiwen.com/subject/wimarrtx.html