需求:
假设现在系统有两个空闲资源可以被利用,但同一时间却有三个线程要进行访问,这种情况下该如何处理呢?
或者
我们要下载很多图片,并发异步进行,每个下载都会开辟一个新的线程,可是我们又担心太多线程肯定cpu吃不消,那么我们这里改怎么处理呢?
使用信号量可以满足于上面所叙述的需求,使用信号量控制最大开辟线程数。
定义:
1.信号量:就是一种可用来控制访问资源的数量的标示,设定了一个信号量,在线程访问之前加上信号量的处理,则可告知系统按照我们指定的信号量数量来执行多个线程。
其实,这有些类似锁机制了,只不过信号量都是系统帮助我们处理,我们只需要之执行线程之前,设定一个信号量值,并在使用时,加上信号量处理方法就行。
2.信号量主要有3个函数,分别是:
//创建信号量,参数:信号的初值,如果小于0则会返回NULL
dispatch_semaphore_create (信号量值)
//等待 降低信号量
dispatch_semaphore_wait (信号量,等待时间)
//提高信号量
dispatch_semaphore_signal (信号量)
注意,正常的使用顺序是先降低然后在提高,这两个函数通常成队使用。