swift - IOS-Swift-以下单例实现在swift中真的是线程安全的吗?
问题描述
我通常编写单例类的以下实现,我想知道这是否是线程安全的:
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循环的范围改变时,打印的结果是不同的。我可以说单例类不是线程安全的吗?
解决方案
推荐阅读
- javascript - 如何在渲染时显示不同的组件。我在同一页面上注册并登录
- r - 错误没有适用于“select_”的方法应用于“字符”类的对象
- active-directory - 从 Active Directory 获取自定义属性到 CRM
- amazon-web-services - 将单个 tar.gz 归档到 AWS Glacier 或 S3 的文件上传限制
- java - 警报服务(重构 AlertService 和 MapAlertDAO 类)
- jquery - 在“keyup”输入字段颜色应为红色
- elasticsearch - Producer.send 在 .map 内不起作用
- d3.js - d3js 序数比例不能限制平移
- php - php mysqli 持久连接未在 App Engine 中共享
- android - 未解决的参考 getResources() Kotlin