前言
假设,现在系统有两个空闲资源可以被利用,但同一时间却有三个线程要进行访问,这种情况下,该如何处理呢?
或者我们需要并发异步下载很多资源,每次下载都可能会开辟一个线程,线程一多就会影响cpu,那么我们就可以用信号量控制一下最大开辟线程数。简单来说就是使用信号量来控制并发。
信号量是一个整形值并且具有一个初始计数值,并且支持两个操作:信号通知和等待。
信号量函数
1、创建信号量:
dispatch_semaphore_t dispatch_semaphore_create(long value);
创建一个整形的信号总量, 参数value必须≥0,<0时的值将创建失败返回NULL。
而value值意味可以有多少个并发的线程在同时运行。
2、信号量等待:
long dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout);
使一个信号量等待,即减少一个信号总量。 减少后,如果信号总量小于零,该线程会被阻塞,会等待到信号总量大于等于0时返回,该线程继续执行。
参数dsema传递NULL的结果未定义,参数timeout可以传递 DISPATCH_TIME_NOW 和 DISPATCH_TIME_FOREVER 或者自己创建一个dispatch_time_t