Swift4.2不支持stdatomic - 什么是原子布尔的简单实现?

问题描述 投票:1回答:1

我经常在ObjectiveC文件中使用stdatomic,但它还没有(它会吗?)出现在Swift中。我发现几个开源框架似乎提供相同的功能,但我想要的是小而简单的东西。

swift4.2 stdatomic
1个回答
0
投票

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!")
}
© www.soinside.com 2019 - 2024. All rights reserved.