dispatch_semaphore_t 信号量相关知识
来源:互联网 发布:java web 前后端分离 编辑:程序博客网 时间:2024/05/19 06:38
dispatch_semaphore_t是GCD系列的产物,semaphore译词有信号量一说!
与之相关的有三个函数
dispatch_semaphore_t dispatch_semaphore_create(long value);long dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout);long dispatch_semaphore_signal(dispatch_semaphore_t dsema);第一个函数是创建一个信号量,其中的参数value是信号量的初始值,返回值为信号量.
第二个函数是等待信号量的函数,其中有两个参数,第一个dsema即为等待的信号量,第二个参数timeout为等待的时间,精度为ns(纳秒).返回值是long型,如果为0,表示等待成功,如果不为0则是等待超时,等待成功将会执行接下来的代码,否则将会在设置的等待时间内阻塞后面的代码!
第三个函数是对信号量进行操作,使信号量加1,参数dsema表示操作的信号量,返回值是long型,如果返回值是非零的,表示线程被唤起,否则表示线程被阻塞!
关于信号量,目前查找到的信息为,创建后会有个初始的信号量,然后如果信号量大于0的话,每wait1次信号量会减1,每signal1次信号量加1,如果信号量为0的话,wait会一直等到设置的超时时间才会执行接下来的代码,因为信号量是0,所以不会对信号量进行操作!
这可以保证wait和signal之间的代码在同一时间只能有一份在执行!
需要注意的是,create的时候设置的值不是他的上限,你也可以先给它signal两次在wait两次,也会正常执行之间的代码!
下面是常用的例子:
dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_semaphore_t semaphore = dispatch_semaphore_create(1); NSMutableArray *array = [NSMutableArrayarray]; for (int index = 0; index < 100000; index++) { dispatch_async(queue, ^(){ dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);// NSLog(@"addd :%d", index); [array addObject:[NSNumber numberWithInt:index]]; dispatch_semaphore_signal(semaphore); }); }如果不加入信号量,传说有时候运行是会有崩溃现象的!
0 0
- dispatch_semaphore_t 信号量相关知识
- dispatch_semaphore_t 信号量
- GCD-信号量(dispatch_semaphore_t)
- GCD-信号量(dispatch_semaphore_t)
- 信号量的相关知识
- 信号量的相关知识
- 多线程知识巩固(六) dispatch_semaphore_t
- iOS多线程中的dispatch_semaphore_t semaphore(dispatch组和信号量。)
- iOS dispatch_semaphore_t
- 信号量集知识整理
- 信号量知识汇总
- semaphore 信号量使用相关
- 信号量相关函数整理
- 信号量处理相关函数
- 信号量sem_wait 线程信号量相关操作
- sem_t 等相关函数 信号量
- 邮箱与信号量相关问题
- dispatch_semaphore_t sema 等待
- libsvm使用注意事项(参数顺序)
- 网络基本功(十一):TCP窗口调整与流控
- 网络基本功(十二):细说Linux网络配置(上)
- 网络基本功(十三):细说Linux网络配置(下)
- 语音离线命令词识别
- dispatch_semaphore_t 信号量相关知识
- Android Service 之启动服务( startService() )
- 【其他】windows10下mysql5.7安装中的登录以及密码过期问题
- 内容提供者(ContentProvider)---获取联系人
- Atitit 单项功能开发 最佳实践规范 标准化流程attilax总结.docx
- Atitit orm优缺点 Hinaernate mybatis 区别。attilax总结
- Atitit Atitit 客户常见技术问题的解答.docx
- Android中内容观察者的使用---- ContentObserver类详解
- Leetcode 155. Min Stack