GCD 之线程死锁
来源:互联网 发布:电脑桌面图标整理软件 编辑:程序博客网 时间:2024/04/28 03:56
GCD相比NSOperation,无法cancel正在进行的线程。
GCD用不好会造成死锁。
- (void)viewDidLoad{ [super viewDidLoad]; NSLog(@"=================1"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"=================2"); }); NSLog(@"=================3");}
dispatch_sync 函数不会立即返回,会阻塞当前线程,等待 block同步执行完成。而且它是在主线程上,所以block和主线程互相等待。
int count = 0; do { NSLog(@"1"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"2"); }); NSLog(@"3"); count ++; }while (count < 100); while(1);//注释掉这句就不会死锁
2永远不会被打印,主线程被阻塞了,dispatch_async 函数会立即返回, block会在后台异步执行,如果没有while(1)阻塞主线程的话不会造成死锁。
总的来说,GCD中全局队列属于并行队列,里面可以有多个字线程运行。主队列是串行队列,一个一个操作挨个之行,这种情况下入如果循环等待那么就会死锁。
do { NSLog(@"1"); dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"4"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"2"); }); }); NSLog(@"3"); count ++; }while (count < 100);
打印结果是1 43 134(3 4不确定顺序) 2是最后打印的,
0 0
- GCD 之线程死锁
- GCD 之线程死锁
- GCD 之线程死锁
- GCD 之线程死锁
- GCD 之线程死锁
- GCD 之线程死锁问题
- iOS - GCD 之线程死锁
- GCD线程死锁
- GCD之死锁体会
- GCD之死锁
- GCD入门介绍三----线程死锁
- GCD线程死锁解锁案例分析
- 线程同步之死锁
- 线程同步之死锁
- 线程编程之死锁
- 线程之GCD
- IOS之线程(GCD)
- GCD之线程组
- 项目14-三角形类雏形(4)
- Java远程方法调用,RMI入门教程
- Linux---centos编译安装mysql5.6
- 关于屏幕适配问题的解决方案
- IOS开发之UIView总结
- GCD 之线程死锁
- FFmpeg的一些关键的数据结构(一)
- JVM远程DEBUG(JPDA )
- JFinal+maven+freemarker入门教程
- FFmpeg的一些关键的数据结构(二)
- Mockito:一个强大的用于Java开发的模拟测试框架
- Java 垃圾回收
- IOS用CGContextRef画各种图形
- TestNG 入门