//
|
// Lock.swift
|
// RxSwift
|
//
|
// Created by Krunoslav Zaher on 3/31/15.
|
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
|
//
|
|
protocol Lock {
|
func lock()
|
func unlock()
|
}
|
|
// https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html
|
typealias SpinLock = RecursiveLock
|
|
extension RecursiveLock : Lock {
|
@inline(__always)
|
final func performLocked<T>(_ action: () -> T) -> T {
|
self.lock(); defer { self.unlock() }
|
return action()
|
}
|
}
|