在CGD中快速实现多线程的并发控制
2013-12-27 13:11
211 查看
但当我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用
NSOperationQueue来处理并发控制,但如何在GCD中快速的控制并发呢?答案就是
dispatch_semaphore,对经常做unix开发的人来讲,我所介绍的内容可能就显得非常入门级了,信号量在他们的多线程开发中再平常不过了。
在GCD中有三个函数是semaphore的操作,分别是:
dispatch_semaphore_create 创建一个semaphore
dispatch_semaphore_signal 发送一个信号
dispatch_semaphore_wait 等待信号
简单的介绍一下这三个函数,第一个函数有一个整形的参数,我们可以理解为信号的总量,dispatch_semaphore_signal是发送一个信号,自然会让信号总量加1,dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,否则就可以正常的执行,并让信号总量-1,根据这样的原理,我们便可以快速的创建一个并发控制。
dispatch_group_t group = dispatch_group_create(); dispatch_semaphore_t semaphore = dispatch_semaphore_create(10); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); for (int i = 0; i < 100; i++) { dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); dispatch_group_async(group, queue, ^{ NSLog(@"%i",i); sleep(2); dispatch_semaphore_signal(semaphore); }); } dispatch_group_wait(group, DISPATCH_TIME_FOREVER); dispatch_release(group); dispatch_release(semaphore); |
相关文章推荐
- 在CGD中快速实现多线程的并发控制
- IOS--多线程--GCD--在CGD中快速实现多线程的并发控制
- 在CGD中快速实现多线程的并发控制
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- python多线程并控制并发数实现
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架--转载
- 【多线程】控制多线程并发的函数的阻塞功能如何实现?
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架--转载
- 实现 Java 多线程并发控制框架
- 利用CAS机制实现多进程,多线程下的无锁并发控制
- 标准的并发控制实现
- 用C#实现蜘蛛/爬虫程序的多线程控制
- Java多线程与并发应用-(11)-用Lock+Condition实现1,2,3 三个模块按顺序执行。
- Shiro 控制并发登录人数限制及登录踢出的实现代码