Sources/ConfidenceProvider/UnfairLock.swift (16 lines of code) (raw):
import Foundation
final class UnfairLock {
private var _lock: UnsafeMutablePointer<os_unfair_lock>
init() {
_lock = UnsafeMutablePointer<os_unfair_lock>.allocate(capacity: 1)
_lock.initialize(to: os_unfair_lock())
}
deinit {
_lock.deallocate()
}
func locked<T>(_ code: () throws -> T) rethrows -> T {
os_unfair_lock_lock(_lock)
defer { os_unfair_lock_unlock(_lock) }
return try code()
}
}