1.理解:DispatchSemaphore,就是一个信号量,这个信号量就相当于一个互斥资源,用来控制异步线程之间的互相等待,达到线程锁的功能,与一般的互斥锁不同,互斥锁是锁住某段代码或资源,保证资源的安全访问。而信号量以自身为资源,达到控制线程相互依赖关系。
2.应用1:异步任务的等待。创建一个value为0的信号量,当任务执行完成后,通过signal方法增加1,在主线程或者其他地方通过wait函数等待并进入其他任务。
do {
let queue = DispatchQueue.global()
let sema = DispatchSemaphore.init(value: 0)
queue.async {
//执行异步任务
sleep(10)
print("10完成")
sema.signal()
}
_ = sema.wait(timeout: DispatchTime.distantFuture)
print("进入主线程下个任务,会卡死主线程")
}
3.应用2:通过group 控制多个线程任务之间的依赖关系。
//1.group中控制依赖管理,1,2,3三个异步操作需要完成之后才能刷新UI,enter 和 leave控制group中所有操作是否完成。
let queue