我经常在ObjectiveC文件中使用stdatomic,但它还没有(它会吗?)出现在Swift中。我发现几个开源框架似乎提供相同的功能,但我想要的是小而简单的东西。
我discovered the following code对我来说很好:
struct AtomicBoolean {
private var semaphore = DispatchSemaphore(value: 1)
private var b: Bool
var val: Bool {
get {
semaphore.wait()
let tmp = b
semaphore.signal()
return tmp
}
set {
semaphore.wait()
b = newValue
semaphore.signal()
}
}
init(_ initialState: Bool) {
b = initialState
}
}
它确实小巧高效! DispatchSemaphores也很有效,只有在存在争用时才进入内核空间(参考并发编程指南)。
var foo = AtomicBoolean(false)
foo.var = true
if foo.var == true {
print("See!")
}