【问题标题】:Does Swift have any concurrency safety guarantees?Swift 有任何并发​​安全保证吗?
【发布时间】:2019-12-23 01:54:42
【问题描述】:

swift 是否有任何并发​​安全保证,例如 Rust 的数据竞争保证,或体面的功能并发支持?

【问题讨论】:

    标签: swift concurrency functional-programming


    【解决方案1】:

    没有 swift 在使用普通块时没有任何这些受赠者,因此您需要自己实现锁定机制以保证数据完整性并自己解决竞争条件。

    这是一个示例代码,您可以在操场上自己尝试一下,您可以看到结果符合循环外的任何预期输出,因为两个队列可互换使用相同的资源。希望这会有所帮助。

    import Cocoa
    
    var x = 1
    
    let q1 = DispatchQueue(label: "FirstQueue")
    let q2 = DispatchQueue(label: "SecondQueue")
    
    q1.async {
        for i in 0...999 {
            print("First Queue working \(Thread.current)")
            x += 1
        }
        print(x)
    }
    
    q2.async {
        for i in 0...999 {
            print("Second queue working \(Thread.current)")
            x -= 1
        }
        print(x)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多