主队列-异步执行;主队列-同步执行(死锁)

主队列-同步执行死锁问题,分享


//主队列-异步执行

//分析:在主线程,任务有序执行,当执行demo,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是

异步执行,所以任务A执行完之后,才去执行任务B(block里面的代码); 可以通过NSLog验证.

-(void)demo{

    NSLog(@"1235");

    //1.主队列,不是自己创建的,是从系统获得,是一个特殊的串行队列,一定对应主线程

    dispatch_queue_t mainQueue = dispatch_get_main_queue();    

    for (int i = 0; i<20; i++) {

        dispatch_async(mainQueue, ^{

            NSLog(@"%d->%@",i,[NSThread currentThread]);

        });

    }

    NSLog(@"呵呵");

}

---------------------------------------------------------------------------

//主队列-同步执行-->导致死锁

//当前线程是主线程,不执行

//分析:在主线程,任务有序执行,当执行demo2,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是

同步执行,所以任务B会等着任务A执行完之后,在去执行由于又是在主线程中,任务A(整个demo2)等着任务B执行完之后在去执行之后的程序,这样两

个任务相互等待,导致死锁,->只打印i;

-(void)demo2{

    NSLog(@"i");

    dispatch_queue_t mainQueue = dispatch_get_main_queue();

    dispatch_sync(mainQueue, ^{

        NSLog(@"%@",[NSThread currentThread]);

    });

    NSLog(@"呵呵");

}

-------------------------------------------------------------------------

以上为个人理解,哪位大牛有更高深的见解请联系我(工作中互相学习)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值