@propertyWrapper Atomic на os_unfair_lock: что здесь не так?
Задача
Коллега предложил «атомарную» обёртку. Найди проблемы.
@propertyWrapper
struct Atomic<Value> {
private var value: Value
private var lock = os_unfair_lock()
var wrappedValue: Value {
mutating get {
os_unfair_lock_lock(&lock)
defer { os_unfair_lock_unlock(&lock) }
return value
}
set {
os_unfair_lock_lock(&lock)
defer { os_unfair_lock_unlock(&lock) }
value = newValue
}
}
init(wrappedValue: Value) { value = wrappedValue }
}
final class Counter {
@Atomic var count = 0
}
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep