Swift 是否有任何并发安全保证?



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

在使用普通块时,没有 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)
}

从 Swift5.5 开始,Swift 增加了对 Concurrency 的支持。 Swift Concurrency 的一个功能是 Actor,它为编译器提供支持以防止数据竞争。介绍演员的wwdc视频在这里。

最新更新