swift - 理解写锁线程 Swift
问题描述
我对写锁定问题的方法有疑问:
let queue = DispatchQueue(label: "ThreadSafeCollection.queue", attributes: .concurrent)
queue.sync { // Read }
queue.async(flags: .barrier) { // Write }
根据我的理解,纠正我错误的部分:
第1部分
我创建了一个并发队列,不同的线程可以在其中执行添加到其中的任务。
第2部分
将队列定义为同步。这是我感到困惑的地方,我知道同步或异步与线程无关,仅与任务的执行方式有关。如果我没记错,同步将等待上一个任务完成后再开始新的任务。由于我们使用并发队列,意味着多个线程可以执行此任务,并且此任务将同步执行。
第 3 部分
由于阅读不会改变共享资源,为什么要强制执行同步?让它异步有什么不同吗?因为每次读取不依赖于彼此?
第 4 部分
我假设我们希望在异步线程上执行写入,因为我们不想阻塞正在执行此任务的线程,例如执行长后端调用。
第 5 部分
我们添加标志屏障是因为我们要确保在写入之前等待添加到队列中的先前任务完成,然后允许后续任务。
非常感谢您的先进!
解决方案
推荐阅读
- mysql - 在 mysql 表 TRUNCATE 之后需要 OPTIMIZE / ANALYZE 吗?
- parsing - 解析先前列表时的歧义
- react-native - 在测试 usinfg jest 时不存在反应本机内置全局对象
- exception - Spock 在 Where 块中测试异常处理
- python - gzip Python3无法将字节转换为字符串
- maven - 如何使用curl将jar作为maven工件发布到bintray?
- zipfoundation - ZipFoundation 存档可以作为邮件附件中的数据发送吗?
- button - 为什么在我的按钮样式中添加带有圆角半径的边框会消除视觉状态?
- android - RecyclerView 项目单击单击项目内的 TextView
- css - 在 IE11 中,元素仅在悬停时显示,但在首次加载时不显示?