iOS-Swift-以下单例实现在swift中是否真的是线程安全的?

时间:2018-08-10 15:57:00

标签: swift thread-safety singleton

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

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

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

  1. “凭借let”

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

  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 循环的范围时,打印的结果将有所不同。我可以说单例类不是线程安全的吗?

0 个答案:

没有答案