Swift - 分派到主队列是不是足以使 var 线程安全?
Posted
技术标签:
【中文标题】Swift - 分派到主队列是不是足以使 var 线程安全?【英文标题】:Swift - Is dispatching to the main queue enough to make a var thread safe?Swift - 分派到主队列是否足以使 var 线程安全? 【发布时间】:2015-06-18 07:01:50 【问题描述】:谈到同步解决方案,我知道有很多东西可以用来确保 var 线程安全。但我的问题是: 由于主队列是串行的,因此向其分派是否足以使 var 对异步读/写操作安全? 假设我有一个 Int 数组:
var myArr: [Int] = []
每当我需要更新它时,我都会使用主队列:
let newVal = 123
dispatch_async(dispatch_get_main_queue(), () -> Void in
myArr.append(newVal)
)
每当我需要阅读时:
dispatch_async(dispatch_get_main_queue(), () -> Void in
println(myArr.count)
)
这足以使 myArr 线程安全吗?
【问题讨论】:
您确定要异步读取该值吗?在您的代码中,您只能在完成块内使用myArr.count
。
嗯,这只是一个例子,用来说明我的问题。在我的实际项目中,数组将通过来自 javascriptCore 的回调进行访问和写入,这意味着它必须是异步的,我需要确保每当这些请求到达时,它们都会以正确的顺序执行并且不会发生冲突。
也许您可以为您的问题添加更具体的代码,特别是回调如何读取数组值。
【参考方案1】:
是的,这就够了。只要您从同一个串行队列中读取和写入,您就是安全的。
【讨论】:
以上是关于Swift - 分派到主队列是不是足以使 var 线程安全?的主要内容,如果未能解决你的问题,请参考以下文章