【发布时间】: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 的回调进行访问和写入,这意味着它必须是异步的,我需要确保每当这些请求到达时,它们都会以正确的顺序执行并且不会发生冲突。
-
也许您可以为您的问题添加更具体的代码,特别是回调如何读取数组值。