DevPrep

Все темы › Задачи с реальных собеседований

@propertyWrapper Atomic на os_unfair_lock: что здесь не так?

Senior PRO

Задача

Коллега предложил «атомарную» обёртку. Найди проблемы.

@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

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store