在CGD中快速实现多线程的并发控制
来源:互联网 发布:帝国cms 防采集 编辑:程序博客网 时间:2024/06/05 02:15
自从ios4.0/mac osx10.6引入了GCD之后,让我们在使用多线程的时候确实方便了很多,关于GCD的一些介绍和使用本站中已经转过一位资深开发者的几篇系列文章,非常彻底的介绍了GCD的用法和一些特性,有兴趣的朋友可以去翻阅。
但当我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用
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,根据这样的原理,我们便可以快速的创建一个并发控制。
123456789101112131415
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);
简单的介绍一下这一段代码,创建了一个初使值为10的semaphore,每一次for循环都会创建一个新的线程,线程结束的时候会发送一个信号,线程创建之前会信号等待,所以当同时创建了10个线程之后,for循环就会阻塞,等待有线程结束之后会增加一个信号才继续执行,如此就形成了对并发的控制,如上就是一个并发数为10的一个线程队列。
// By smking, 说实话, 关于NSOperationQueue 里面貌似已经有关于信号量的管理,它可以设置同时运行多个任务,这样子还不需要我们去更细地设置,不过上面这篇文章也许在特定的情况下,可以做为参考
- 在CGD中快速实现多线程的并发控制
- 在CGD中快速实现多线程的并发控制
- 在CGD中快速实现多线程的并发控制
- CGD多线程的使用
- IOS中CGD的使用
- Web应用中并发控制的实现
- Web应用中并发控制的实现
- Web应用中并发控制的实现
- Web应用中并发控制的实现
- java---多线程的并发控制
- Java并发学习笔记(2)在java中实现多线程的启动
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架--转载
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 实现 Java 多线程并发控制框架
- 电子书下载:The Definitive Guide to MongoDB
- 【PHP】while进阶之遇到某数字跳过
- FlashFXP安装指南
- 清华校长送给毕业生的五句话
- JSONObject JSONArray
- 在CGD中快速实现多线程的并发控制
- 电子书下载:Refactoring SQL Applications
- 喝茶养生要把握最佳时间
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- 关于 4K 电视的一些知识
- Ruby tricks and tips
- 国外几款Scrum工具初探
- Google技术知多少
- 电子书下载:MySQL Stored Procedure Programming