【发布时间】:2019-12-23 01:54:42
【问题描述】:
swift 是否有任何并发安全保证,例如 Rust 的数据竞争保证,或体面的功能并发支持?
【问题讨论】:
标签: swift concurrency functional-programming
swift 是否有任何并发安全保证,例如 Rust 的数据竞争保证,或体面的功能并发支持?
【问题讨论】:
标签: swift concurrency functional-programming
没有 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)
}
【讨论】: