Swift有并发安全保证吗?

时间:2019-08-16 18:51:25

标签: swift concurrency functional-programming

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

1 个答案:

答案 0 :(得分:0)

使用普通块时,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)
}
相关问题