美文网首页
Swift的单例模式及如何处理并发访问

Swift的单例模式及如何处理并发访问

作者: 蜜蜂6520 | 来源:发表于2017-05-03 13:05 被阅读115次

Swift的单例模式

Swift有两种方式实现单例模式

1、全局常量

let globalTool = Tool()

final class Tool {
    fileprivate init() {
        
    }
}

2、类型常量

final class Tool {
    
    static let shared = Tool()
    
    private init() {
        
    }
    
}

处理单例模式的并发访问

1、多线程同时写

final class Tool {
    
    static let shared = Tool()
    
    private var data = [Int]()
    
    // 创建串行队列
    let serialQueue = DispatchQueue(label: "serialQueue")
    
    private init() {
        
    }
    
    func add(item:Int) {
        
        // Swift数组是线程不安全的。串行访问来并发保护
        serialQueue.sync {
            data.append(item)
        }
        
    }
    
}

2、多线程同时读和写

final class Tool {
    
    static let shared = Tool()
    
    private var data = [Int]()
    
    // 创建并行队列
    let concurrentQueue = DispatchQueue(label: "concurrentQueue",attributes: .concurrent)
    
    private init() {
        
    }
    
    func add(item:Int) {
        
        // 设立barrier让写数组操作单独执行。读-写-读
        concurrentQueue.async(execute: DispatchWorkItem(flags: .barrier, block: { 
            self.data.append(item)
        }))
        
    }
    
    func process() {
        
        // 多线程同时读取数组不会造成并发问题
        concurrentQueue.sync {
            for item in data {
                print(item)
            }
        }
        
    }
    
}

如果觉得我的文章对您有用,请点击喜欢。您的支持将鼓励我继续创作!

大家有什么不懂或我哪里写错了都可以评论留言,我一定会回复的~

相关文章

  • Swift的单例模式及如何处理并发访问

    Swift的单例模式 Swift有两种方式实现单例模式 1、全局常量 2、类型常量 处理单例模式的并发访问 1、多...

  • 设计模式(Swift) - 单例模式、备忘录模式和策略模式

    设计模式(Swift) - 单例模式、备忘录模式和策略模式 设计模式(Swift) - 单例模式、备忘录模式和策略模式

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • iOS-单例模式

    swift的单例设计模式 OC的单例设计模式 新学习一种单例思想

  • iOS 伪单例模式

    本文仅探讨 iOS 中单例的适用场景及生命周期管理,如需单例教程及其定义作用的请访问:设计模式系列14--单例模式...

  • swift struct 单例模式

    swift struct 单例模式

  • Spring

    单例模式 Spring默认是单例的,如果Spring注解的bean中有成员变量,当多线程并发访问并修改此成员变量时...

  • Java16-3 单例设计模式下的多线程访问

    当一个单例设计模式被多线程并发访问时,也会出现安全问题。 懒汉式单例设计模式(推荐使用) 不会因为同步而出现安全问...

  • Swift的对象池模式及如何处理并发访问

    对象池模式用来管理一组可重用的对象,可从对象池获取对象来完成任务,用完之后再还给对象池。系统UITableView...

  • 单例

    内存中只有一个对象实例 提供一个全局访问点 OC中的单例 swift中的单例 swift改进过的单例

网友评论

      本文标题:Swift的单例模式及如何处理并发访问

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