GCD之死锁
2024-08-27 05:13:38
GCD相当好用,但用不好就会死锁,始终要记着这样一句秘籍:
不要在串行队列放dispatch_sync、dispatch_apply
下面看几个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
// 防死锁秘籍:不要在串行队列放dispatch_sync、dispatch_apply // 死锁 主线程调用dispatch_apply dispatch_async(dispatch_get_main_queue(), ^{ dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) { NSLog (@ "%ld" ,i); NSLog (@ "%d" ,55); }); }); NSLog (@ "%d" ,999); //死锁 主线程调用dispatch_apply dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) { NSLog (@ "%ld" ,i); NSLog (@ "%d" ,777); }); //不死锁 dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_apply(5, queue, ^(size_t i) { NSLog (@ "%ld" ,i); NSLog (@ "%d" ,66); }); NSLog (@ "%d" ,88); //不死锁 dispatch_async(queue, ^{ dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) { NSLog (@ "%ld" ,i); }); }); // //不死锁 dispatch_async(queue,^{ dispatch_sync(dispatch_get_main_queue(), ^{ NSLog (@ "test" ); }); }); //死锁 dispatch_sync(queue,^{ dispatch_sync(dispatch_get_main_queue(), ^{ NSLog (@ "test" ); }); }); |
最新文章
- chrome浏览器限制的端口
- redis 命令
- ORA-00604: error occurred at recursive SQL level 1
- 产品研发过程中UCD目标的制定与实现
- hdu5057 Argestes and Sequence 分块
- rem 和 ::
- codeforces 425D
- 【转】【C#】序列化(Serialize)、反序列化(Deserialize)
- 权重轮询调度算法(Weighted Round-Robin Scheduling)-C#实现
- 老是出现dispolse 找不到合适的方法来重写
- thinkphp 定位查询 Model:last您所请求的方法不存在!
- ACM——五位以内的对称素数
- jade中mixin的使用
- iOS控制器的创建方式
- HDU 5728 - PowMod
- sql 查看语句的性能
- 裸板驱动总结(makefile+lds链接脚本+裸板调试)
- python非技术性问题整理
- 003_饿了么chaosmonkey实现
- dcoker 安装mysql和数据持久化