Skip to content

Instantly share code, notes, and snippets.

@tom-biel
Created October 26, 2019 03:33
Show Gist options
  • Save tom-biel/71ae98e22940e15b8cceeb15caea9596 to your computer and use it in GitHub Desktop.
Save tom-biel/71ae98e22940e15b8cceeb15caea9596 to your computer and use it in GitHub Desktop.
Atomic property wrapper in Swift
@propertyWrapper
struct Atomic<Value> {
var lock = os_unfair_lock_s()
var _value: Value
init(wrappedValue value: Value) {
_value = value
}
var wrappedValue: Value {
mutating get {
os_unfair_lock_lock(&lock)
defer {
os_unfair_lock_unlock(&lock)
}
return _value
}
set {
os_unfair_lock_lock(&lock)
_value = newValue
os_unfair_lock_unlock(&lock)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment