2017技术笔记

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结束,未唤醒其他任务。

加油~

上一篇 下一篇

猜你喜欢

热点阅读