我有一个可以从多个线程访问的全局变量,包括从主线程。我想使用 NSLock因为它比 GCD 快。
这是我正在尝试做的事情:
struct SynchronizedLock<Value> {
private var _value: Value
private var lock = NSLock()
init(_ value: Value) {
self._value = value
}
var value: Value {
get { lock.synchronized { _value } }
set { lock.synchronized { _value = newValue } }
}
mutating func synchronized<T>(block: (inout Value) throws -> T) rethrows -> T {
return try lock.synchronized {
try block(&_value)
}
}
}
extension NSLocking {
func synchronized<T>(block: () throws -> T) rethrows -> T {
lock()
defer { unlock() }
return try block()
}
}
会NSLock
阻塞主线程还是在主线程上使用安全?这也是同样的情况DispatchSemaphore
并且应该诉诸排队吗?