首页 > 解决方案 > IOS-Swift-以下单例实现在swift中真的是线程安全的吗?

问题描述

我通常编写单例类的以下实现,我想知道这是否是线程安全的:

final class SomeSingleton{ 
   static let sharedInstance = SomeSingleton()
   private init(){} 
}

我搜索了很多博客。有人说由于以下可能的原因,它保证了线程安全:

  1. “凭借让”

我对这些博客有两个困惑:

  1. 当我们谈论单例的线程安全时,是关于创建单例实例还是访问/修改单例类中成员的值?
  2. 我使用下面的代码来测试单例的线程安全性。如果我错了,请指出。

    let queue = OperationQueue()
    
    let op1 = BlockOperation {
        Singleton.sharedInstance.x = 2
        print(Singleton.sharedInstance.x)
    }
    queue.addOperation(op1)
    
    let op2 = BlockOperation{
    
        var sum = 0
        for x in 1...99999999{
            sum += x
        }
        Singleton.sharedInstance.x = 3
    }
    queue.addOperation(op2)
    

    for循环的范围改变时,打印的结果是不同的。我可以说单例类不是线程安全的吗?

标签: swiftthread-safetysingleton

解决方案


推荐阅读