GCD 中的信号量是指 Dispatch Semaphore,就是一种可用来控制访问资源的数量的标识;
设定了一个信号量,在线程访问之前,加上信号量的处理,则可告知系统按照我们指定的信号量数量来执行多个线程。
其实,这有点类似锁机制了,只不过信号量都是系统帮助我们处理了,我们只需要在执行线程之前,设定一个信号量值,并且在使用时,加上信号量处理方法就行了。
关于semaphore的三个函数:
1.dispatch_semaphore_create:创建一个Semaphore并初始化信号的总量
2.dispatch_semaphore_signal:发送一个信号,让信号总量加1
3.dispatch_semaphore_wait:可以使总信号量减1,当信号总量为0时就会一直等待(阻塞所在线程),否则就可以正常执行
实际开发中,我们通常会遇到如下问题:
一、某界面存在多个请求,希望所有请求均结束才进行某操作。对于这一问题的解决方案很容易想到通过线程组进行实现,(真实开发中可能为banner数据请求、主体网络请求、广告网络请求等)代码如下:
运行后马上接收到了线程组完成的提示,之后数据才依次请求下来,在真实开发中会造成的问题为多个请求均加载完成,但界面已在未得到数据前提前刷新导致界面空白。
加上信号量之后再看;
打印结果显示 刷新界面是在所有请求数据完成之后,如下:
再用一段简单的代码演示如下:
以上为对于信号量的简单理解,希望对你能有帮助,主要是用作自己总结。