iOS控制高并发-dispatch_semaphore(信号量)的用法
2017-12-04 13:54
323 查看
1.前言:
在单线程的程序中,程序的执行有先后顺序,但是在多线程的程序中,在线程之间的程序运行中没有先后顺序,因此会出现并发的情况,导致程序的不确定性,因此需要dispatch_semaphore做程序的高并发管理。
2.介绍:
dispatch_semaphore可以看作已整形作为计数方式进行控制的方式,dispatch_semaphore的基本单位是整形,在GCD中有三个函数可以进行控制:
dispatch_semaphore_create(a) 创建一个初始值为a的semaphore
dispatch_semaphore_wait 使信号总量-1,并且当a的信号量为大于0的时候,gcd线程继续执行,当a的信号量的值小于0时,gcd线程创建阻塞,其余线程继续运行。
dispatch_semaphore_signal 发送一个信号,使信号量+1,
3.举例:
//创建一个总数为0的信号量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self setObject:object forKey:key block:^(TMCache *cache, NSString *key, id object) {
//线程结束之后发送信号量
dispatch_semaphore_signal(semaphore);
}];
//信号量-1,方法等待,保持始终只有一个[self setObject:object forKey:key block]方法运行
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
在单线程的程序中,程序的执行有先后顺序,但是在多线程的程序中,在线程之间的程序运行中没有先后顺序,因此会出现并发的情况,导致程序的不确定性,因此需要dispatch_semaphore做程序的高并发管理。
2.介绍:
dispatch_semaphore可以看作已整形作为计数方式进行控制的方式,dispatch_semaphore的基本单位是整形,在GCD中有三个函数可以进行控制:
dispatch_semaphore_create(a) 创建一个初始值为a的semaphore
dispatch_semaphore_wait 使信号总量-1,并且当a的信号量为大于0的时候,gcd线程继续执行,当a的信号量的值小于0时,gcd线程创建阻塞,其余线程继续运行。
dispatch_semaphore_signal 发送一个信号,使信号量+1,
3.举例:
//创建一个总数为0的信号量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self setObject:object forKey:key block:^(TMCache *cache, NSString *key, id object) {
//线程结束之后发送信号量
dispatch_semaphore_signal(semaphore);
}];
//信号量-1,方法等待,保持始终只有一个[self setObject:object forKey:key block]方法运行
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
相关文章推荐
- iOS --- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发(dispatch_semaphore)以及dispatch_group_async
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- 利用GCD信号量(dispatch_semaphore)控制并发
- ios 多线程控制线程并发数、GCD之dispatch_group、GCD信号量
- iOS 关于dispatch_semaphore_t(信号量) 和 dispatch_group_t (组) 线程执行顺序的使用
- iOS学习之GCD 信号量详解,dispatch_semaphore、NSOperationQueue
- iOS学习笔记74-完整详解GCD系列(四)dispatch_semaphore(信号量)
- iOS信号量-dispatch_semaphore
- 信号量dispatch_semaphore在iOS APP编程里的“应用”
- iOS之利用GCD信号量控制并发网络请求
- [笔记][Java7并发编程实战手册]3.2 资源的并发访问控制Semaphore信号量
- iOS GCD中级篇 - dispatch_semaphore(信号量)的理解及使用
- iOS多线程开发—— GCD dispatch_semaphore 信号量
- iOS GCD之dispatch_semaphore(信号量)