我通常编写以下单例类的实现,我想知道这是否是线程安全的:
final class SomeSingleton{
static let sharedInstance = SomeSingleton()
private init(){}
}
我搜索了很多博客。 有人说它可以保证线程安全,原因如下:
我对这些博客有两个困惑:
我使用以下代码测试单例的线程安全性。如果我错了,请指出。
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 循环的范围时,打印的结果将有所不同。我可以说单例类不是线程安全的吗?