iOS信号量-dispatch_semaphore
来源:互联网 发布:手机sql注入工具 编辑:程序博客网 时间:2024/05/16 14:15
__block NSString *strD ; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"循环/取值-1---%@",[NSThread currentThread]); for (int i = 0; i<10; i++) { strD = [NSString stringWithFormat:@"%d",i]; NSLog(@"strD---1---%@",strD); } }); dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"循环/取值-2---%@",[NSThread currentThread]); if (strD ==nil ) { NSLog(@"取不到值啊!!!===%@",strD); }else{ NSLog(@"取到了strD===%@",strD); } });
如果在第二个线程中必须取到值,用异步并发,会出现很多情况,有可能取到值,也有可能取到空。
有没有能直接取到值的方法呢!
答案是一定有的,那就是dispatch_semaphore
不多说直接上代码
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); __block NSString *strD ; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"循环/取值-1---%@",[NSThread currentThread]); for (int i = 0; i<10; i++) { strD = [NSString stringWithFormat:@"%d",i]; NSLog(@"strD---1---%@",strD); dispatch_semaphore_signal(semaphore); } }); dispatch_async(dispatch_get_global_queue(0, 0), ^{ dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); NSLog(@"循环/取值-2---%@",[NSThread currentThread]); if (strD ==nil ) { NSLog(@"取不到值啊!!!===%@",strD); }else{ NSLog(@"取到了strD===%@",strD); } });
dispatch_semaphore_create(0) 初始值为0, dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
会一直等待,当for循环执行的时候 dispatch_semaphore_signal(semaphore);
发送一条信号,值变1,这时候开始取值。
0 0
- iOS信号量-dispatch_semaphore
- iOS GCD之dispatch_semaphore(信号量)
- iOS --- GCD 信号量控制并发 (dispatch_semaphore)
- dispatch_semaphore信号量
- dispatch_semaphore (信号量)
- iOS学习之GCD 信号量详解,dispatch_semaphore、NSOperationQueue
- iOS多线程开发—— GCD dispatch_semaphore 信号量
- 信号量dispatch_semaphore在iOS APP编程里的“应用”
- iOS控制高并发-dispatch_semaphore(信号量)的用法
- dispatch_semaphore(信号量)
- dispatch_semaphore信号量锁的
- 信号量dispatch_semaphore的用法
- GCD dispatch_semaphore 信号量
- GCD(二) ---- dispatch_semaphore 信号量
- ios--dispatch_semaphore
- iOS学习笔记74-完整详解GCD系列(四)dispatch_semaphore(信号量)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- redis3.0配置翻译
- 科德十二定律(Codd's 12 rules)
- 在studio中遇见 解决Gradle DSL method not found: ‘android()’
- 文章标题
- 关于一些电商的问题汇集学习
- iOS信号量-dispatch_semaphore
- [Network Analysis] 复杂网络分析总结
- 用户名与密码
- js 从一个select选择数据添加到另一个select(包括移除)
- 等差数列
- 剑指Offer----面试题四之相关题目
- 测试
- LeenCode--Remove Element
- 笔试题60. LeetCode OJ (47)