swift是否具有任何并发安全性保证,例如Rust的数据竞争保证或不错的功能性并发支持?
答案 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)
}