iOS 多线程开发GCD如何控制最大并发数

    我们做iOS开发的时候,使用GCD控制同一条线程中的最大并发数,不可能是一直往同一条线程中塞。这个时候就用到的GCD中的信号量控制机制--dispatch_semaphore_create。

创建信号量的方式:

(1)dispatch_semaphore_creat SignalCount = dispatch_semaphore_creat(10).

这个地方后面的这个10,是一个整数,可以是1,2,3,。。。表示在信号等待的时候,下一次收到的的信号量,说白了,就是这个数字控制的最大并发数。

(2)dispatch_semaphore_signal( ),这是一句表示信号通知。表示在信号等待的时候,收到的下一个信号量。一般是一个“信号量对象”。

(3)dispatch_semaphore_wait(参数一,参数二 ),这一句表示信号等待。

一般参数一会放一个信号对象,就是我们建立的那个,如果这个对列的信号量小于0的时候,就会一直等待下去。

参数二的值一般是 DISPATCH_TIME_FOREVER 和 DISPATCH_TIME_NOW

下面我们写一段代码来说明一下。(注:当然是参考别人的)



这个地方,解释一下,新建一个信号量为10的对象,就是将队列的最大并发数控制在10。

第一次打印的结果是 0,1,2,3,4,5,6,7,8,9。十个数字。

最关键的是dispatch_semaphore_signal(semphore),如果打印完第一轮十个数字,不再进行信号通知的话,线程就永远阻塞下去咯。剩下的10~99就不会再打印下去。

(注:以上是看了一个大神地思路以后,自己摆弄了一下,然后给大家解释一下,感谢那位大神,有些公司去面试的时候,会问NSOperation这个类通过调用setMaxConcurrentOperationCount这个方法设置最大的并发数,多线程技术GCD可以吗?答案是可以的,还有之前看过另外一个大神的,通过信号量控制,将异步的线程变成同步线程的,有兴趣的同学可以去参阅以下)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 程序中同步和异步是什么意思?有什么区别? 解释一:异步调用是通过使用单独的线程执行的。原始线程启动异步调用,异步调...
    风继续吹0阅读 4,650评论 1 2
  • 原创内容,转载请注明出处: http://www.jianshu.com/p/ac11fe7ef78c 前言 多线...
    抱紧我的小鲤鱼阅读 12,827评论 6 78
  • GCD笔记 总结一下多线程部分,最强大的无疑是GCD,那么先从这一块部分讲起. Dispatch Queue的种类...
    jins_1990阅读 4,140评论 0 1
  • 雨后相思如烟雨, 湿尽香愁未肯休。 繁花隐尽枯枝落, 不见音容立晚秋。
    乡村王子阅读 1,292评论 0 0
  • array、vector、deque、 set/multiset、map/multimap、 unordered_...
    VAYY阅读 4,251评论 0 1

友情链接更多精彩内容