2017笔记——信号量
2018-07-28 本文已影响8人
满庭花醉三千客
对于资源竞争,使用GCD的信号量能够很好的处理之。
下面就上代码:
屏幕快照 2017-06-16 下午3.09.58.png 屏幕快照 2017-06-16 下午3.10.16.png 屏幕快照 2017-06-16 下午3.10.35.png 屏幕快照 2017-06-16 下午3.10.58.png主要涉及到这么三个函数:
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时,也就是允许两个线程并行时:
屏幕快照 2017-06-16 下午4.32.04.png分析一下:
时间轴:第0秒
任务1,2 同时开始运行
时间轴:第1秒
任务1结束,唤醒任务3开始。
时间轴:第2秒
任务3结束,唤醒任务4开始。
时间轴:第3秒
任务4结束,未唤醒其他任务。
时间轴:第3.5秒
任务2结束,未唤醒其他任务。
加油~