let queue = DispatchQueue(label: "com.sfit.demo")
let sema = DispatchSemaphore(value: 1)
queue.async {
Thread.sleep(forTimeInterval: 0.4)
print("task1 done")
let sign = sema.signal()
print("sign: \(sign)")
}
var result = sema.wait(timeout: .distantFuture)
print(result)
queue.async {
Thread.sleep(forTimeInterval: 0.2)
print("task2 done")
let sign = sema.signal()
print("sign: \(sign)")
}
result = sema.wait(timeout: .distantFuture)
print(result)
信号量是可以用来阻塞当前线程,设置value不同,可以有多种使用场景。
1 value为0,阻塞当前线程,线程等待
2.value为1,当成锁来使用,串行执行
3.value大于1,限制线程生成数量