博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS--多线程--GCD--在CGD中快速实现多线程的并发控制
阅读量:6230 次
发布时间:2019-06-21

本文共 1421 字,大约阅读时间需要 4 分钟。

声明:该文章原文地址:http://www.tanhao.me/pieces/392.html.

 

自从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,根据这样的原理,我们便可以快速的创建一个并发控制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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个线程(便于理解,其实并非为10个固定的数值)之后,for循环就会阻塞,等待有线程结束之后会增加一个信号才继续执行,如此就形成了对并发的控制,如上就是一个并发数为10的一个线程队列。

转载于:https://www.cnblogs.com/howdoudo/p/3863457.html

你可能感兴趣的文章
PXE网络装机
查看>>
人工智能赢了人类,那又如何?
查看>>
今天客户遇到的一个问题:Linux系统的主机碰上了ARP
查看>>
[Thinking In Java]代码整理之移位操作符(shift operators)
查看>>
windows 8预测版本(x64,x86)下载
查看>>
Android Studio 3.0 之后打包apk出现应用未安装问题
查看>>
我的友情链接
查看>>
为你的AliOS Things应用增加自定义cli命令
查看>>
我的友情链接
查看>>
Ez×××客户端在服务器侧没有配置隧道分离的情况下如何直接上公网
查看>>
如何备份cisco路由器配置文件
查看>>
部署Symantec Antivirus 10.0网络防毒服务器之六
查看>>
《paste命令》-linux命令五分钟系列之二十
查看>>
CTO职场解惑指南系列(一)
查看>>
安排!活动素材的亿级用户精准投放
查看>>
debian8.4下配置pgpool+pg9.5双主备
查看>>
用scrapy爬取ttlsa博文相关数据存储至mysql
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
AOP 的利器:ASM 3.0 介绍
查看>>