首页 > 解决方案 > 理解写锁线程 Swift

问题描述

我对写锁定问题的方法有疑问:

let queue = DispatchQueue(label: "ThreadSafeCollection.queue", attributes: .concurrent)

queue.sync { // Read }
 
queue.async(flags: .barrier) {  // Write } 

根据我的理解,纠正我错误的部分:

第1部分

我创建了一个并发队列,不同的线程可以在其中执行添加到其中的任务。

第2部分

将队列定义为同步。这是我感到困惑的地方,我知道同步或异步与线程无关,仅与任务的执行方式有关。如果我没记错,同步将等待上一个任务完成后再开始新的任务。由于我们使用并发队列,意味着多个线程可以执行此任务,并且此任务将同步执行。

第 3 部分

由于阅读不会改变共享资源,为什么要强制执行同步?让它异步有什么不同吗?因为每次读取不依赖于彼此?

第 4 部分

我假设我们希望在异步线程上执行写入,因为我们不想阻塞正在执行此任务的线程,例如执行长后端调用。

第 5 部分

我们添加标志屏障是因为我们要确保在写入之前等待添加到队列中的先前任务完成,然后允许后续任务。

非常感谢您的先进!

标签: swiftmultithreading

解决方案


推荐阅读