| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- //
- // Locked.swift
- // LoopKit
- //
- // Copyright © 2018 LoopKit Authors. All rights reserved.
- //
- import os.lock
- internal class Locked<T> {
- private var lock = os_unfair_lock()
- private var _value: T
- init(_ value: T) {
- os_unfair_lock_lock(&lock)
- defer { os_unfair_lock_unlock(&lock) }
- _value = value
- }
- var value: T {
- 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
- }
- }
- func mutate(_ changes: (_ value: inout T) -> Void) -> T {
- os_unfair_lock_lock(&lock)
- defer { os_unfair_lock_unlock(&lock) }
- changes(&_value)
- return _value
- }
- }
|