对于资源竞争,使用GCD的信号量能够很好的处理之。
下面就上代码:
主要涉及到这么三个函数:
dispatch_semaphore_create 创建信号量,传入的数字决定有多少个任务并行。1为串行
dispatch_semaphore_signal 信号量加1
dispatch_semaphore_wait 信号量减1,信号量为0时,阻塞当前线程等待timeout。
我们的几个任务:
1 停留1秒 超时时间:永久
2 停留3.5秒 超时时间:1秒
3 停留1秒 超时时间:永久
4 停留1秒 超时时间:永久
当我们的信号量为2时,也就是允许两个线程并行时:
分析一下:
时间轴:第0秒
任务1,2 同时开始运行
时间轴:第1秒
任务1结束,唤醒任务3开始。
时间轴:第2秒
任务3结束,唤醒任务4开始。
时间轴:第3秒
任务4结束,未唤醒其他任务。
时间轴:第3.5秒
任务2结束,未唤醒其他任务。
加油~