美文网首页
主进程中GCD用main queue会卡死但用新生成串行queu

主进程中GCD用main queue会卡死但用新生成串行queu

作者: LeeRich | 来源:发表于2017-11-14 16:19 被阅读17次

主进程中添加任务到GCD的main queue会卡死,而如果用生成的queue却正常运行:

dispatch_queue_t serialQueue = dispatch_queue_create("squeue",NULL);

//    dispatch_queue_t mainQueue = dispatch_get_main_queue();

NSLog(@"Main Queue-->%@", dispatch_get_main_queue());

dispatch_sync(serialQueue, ^{//如果用mainQueue就卡死

NSLog(@"Task 1-->%@", [NSThreadcurrentThread]);

});

在main()中执行没问题,如果dispatch_sync改用mainQueue的话就卡死了。

这个是最典型的互相等待导致锁死呀。

调用的dispatch_sync函数一直得不到返回,main queue被阻塞,而我们的block又需要等待main queue来执行它,死锁愉快的产生了。

1

Everything in your program runs on the main queue except for code that you explicitly dispatch onto another queue. Code on the main queue will always run on the main thread. Code dispatched on another queue may or may not run on the main thread.

当然也可能是自己太菜,连所有语句都是运行在主队列上这种大家都普遍默认的常识都不懂,所以才会大费周章的解释死锁现象。因为以前用c,不太有iOS主队列的概念。

相关文章

  • 主进程中GCD用main queue会卡死但用新生成串行queu

    主进程中添加任务到GCD的mainqueue会卡死,而如果用生成的queue却正常运行: dispatch_que...

  • GCD所有函数

    GCD中的队列类型 The main queue(主线程串行队列)可以通过dispatch_get_main_qu...

  • 多线程:GCD

    多线程:GCD The main queue(主线程串行队列): 与主线程功能相同,提交至Main queue的任...

  • GCD之线程死锁

    GCD Queue 的划分 The main queue :主队列,主线程就是在个队列中,是串行队列,dispa...

  • GCD学习笔记

    Grand Central Dispatch(GCD) 1.Dispatch Queue Dispath Queu...

  • 详解GCD<1>队列

    GCD有三种queue main queue: 主线程队列。是一个串行队列。一般用来更新UI。 global qu...

  • Swift: GCD基本知识与 Operation Queue

    GCD的三种queue main queue: 主线程队列.她是一个串行队列,一般用于更新UI global qu...

  • Swift GCD

    GCD的三种queue main queue: 主线程队列.她是一个串行队列,一般用于更新UI global qu...

  • iOS开发—GCD笔记

    多线程,主GCD 串行队列(Serial Dispatch Queue,等待现有处理结束) 并行队列�(Concu...

  • GCD的串行队列和并行队列

    GCD中有三种队列类型: The main queue: 与主线程功能相同。是一个串行队列。 Global que...

网友评论

      本文标题:主进程中GCD用main queue会卡死但用新生成串行queu

      本文链接:https://www.haomeiwen.com/subject/qkjfvxtx.html