美文网首页
GCD之线程挂起与恢复

GCD之线程挂起与恢复

作者: changeWong | 来源:发表于2017-02-28 12:37 被阅读713次

我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch_resume函数继续dispatch queue。调用dispatch_suspend会增加queue的引用计数,调用dispatch_resume则减少queue的引用计数。

我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch_resume函数继续dispatch queue。调用dispatch_suspend会增加queue的引用计数,调用dispatch_resume则减少queue的引用计数。当引用计数大于0时,queue就保持挂起状态。因此你必须对应地调用suspend和resume函数。挂起和继续是异步的,而且只在执行block之间(比如在执行一个新的block之前或之后)生效。挂起一个queue不会导致正在执行的block停止。

dispatch_queue_t queue=dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
   dispatch_suspend(queue);

   dispatch_async(queue, ^{
       dispatch_apply(5, queue, ^(size_t index) {
           NSLog(@"%ld  1",index);
       });
   });

   sleep(1);
   NSLog(@"aa");
   dispatch_resume(queue);

运行结果:


311114122173009.jpg

如果把线程挂起恢复取消之后:

dispatch_queue_t queue=dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);

//    dispatch_suspend(queue);
    dispatch_async(queue, ^{

        dispatch_apply(5, queue, ^(size_t index) {
            NSLog(@"%ld  1",index);

        });
    });

    NSLog(@"aa");
//    dispatch_resume(queue);

运行结果:

311120408106092.jpg

可以看到:线程挂起时,添加到线程队列中的block并没执行,而且还将主线程休眠了1秒,取消线程挂起后才执行,而在第二个代码段中,没有使用线程挂起,可以看到并不会都是aa先输出。

相关文章

  • GCD之线程挂起与恢复

    我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch...

  • Java并发编程-CAS与非阻塞算法

    一. 锁的弊端 频繁的线程挂起和恢复 当多个线程发生锁竞争时, 那些没有获取锁的线程可能会被挂起并在稍后恢复执行...

  • 【多线程入门系列三】线程中的其它方法

    前章回顾 多线程入门系列二中我们主要说明了以下知识点线程的挂起与恢复suspend()与resume()的特点:独...

  • GCD中dispatch_suspend/dispatch_re

    在GCD中dispatch_suspend和dispatch_resume提供了“挂起、恢复”队列的功能,简单来说...

  • iOS GCD dispatch_suspend/dispatc

    在GCD中dispatch_suspend和dispatch_resume提供了“挂起、恢复”队列的功能,简单来说...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • 6.协程的挂起

    挂起函数的作用以及使用场景:挂起函数会让协程从正在执行它的线程上脱离,并在挂起函数执行结束恢复到原线程,实现非阻塞...

  • GCD

    iOS多线程 Swift4 GCD深入解析swift GCD 的一些高级用法GCD 之线程组(Dispatch G...

  • Java锁的优化

    一、自旋锁与自适应自旋(Adaptive Spinning) 自旋锁:由于线程阻塞会引起性能的压力,频繁挂起和恢复...

  • kotlin进阶—深入理解协程

    概念 实际就是kotlin官方提供的线程API,相当于AsyncTask 特性:非阻塞挂起,可挂起/恢复执行 本质...

网友评论

      本文标题:GCD之线程挂起与恢复

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