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

标签: ios swift


【解决方案1】:

是的,这就够了。只要您从同一个串行队列中读取和写入,您就是安全的。

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多