材料
- NSCondition 条件锁
struct ZHSemaphore {
var value: Int
var wakeups: Int = 0
let cond = NSCondition()
init(value: Int) {
self.value = value
}
}
extension ZHSemaphore {
mutating func wait() {
cond.lock()
value -= 1
if value < 0 {
repeat {
cond.wait()
debugPrint("iam wake up")
} while wakeups < 1
wakeups -= 1
}
cond.unlock()
}
mutating func signal() {
cond.lock()
value += 1
if value <= 0 {
wakeups += 1
cond.signal()
}
cond.unlock()
}
}