zoukankan      html  css  js  c++  java
  • 多线程理解实践

    1.微博面试题 

        dispatch_queue_t queue = dispatch_queue_create("com.lg.cooci.cn", DISPATCH_QUEUE_CONCURRENT);
        dispatch_async(queue, ^{ // 耗时
            NSLog(@"1");
        });
        dispatch_async(queue, ^{
            NSLog(@"2");
        });
        
        dispatch_sync(queue, ^{
            NSLog(@"3");
        });
        
        NSLog(@"0");
    
        dispatch_async(queue, ^{
            NSLog(@"7");
        });
        dispatch_async(queue, ^{
            NSLog(@"8");
        });
        dispatch_async(queue, ^{
            NSLog(@"9");
        });

    // A: 1230789
    // B: 1237890
    // C: 3120798
    // D: 2137890

    结果:A或者C

    分析:123顺序不定,  0 肯定在3后面 ,789 顺序不定, 肯定在0后面

    2.快手面试题

        dispatch_queue_t queue = dispatch_queue_create("cooci", NULL);
        NSLog(@"1");
        // 异步函数
        dispatch_async(queue, ^{
            NSLog(@"2");
            // 同步
            dispatch_sync(queue, ^{
                NSLog(@"3");
            });
        });
        NSLog(@"5");

    结果:打印 1 5 2 然后  dispatch_sync(queue 这一行死锁

    分析:主线程 打印 1 5, dispatch_async(queue 新开辟一个子线程,子线程 打印 2,串行队列必须执行完一个任务再执行另一个。串行队列执行同步函数,然后同步函数又要获得串行队列去做其他事,形成死锁。

    在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
  • 相关阅读:
    vSphere笔记01~02
    【科普】人眼到底等于多少像素
    《标题党》自我修炼的10个秘籍
    说说云盘背后的黑科技!
    用shell批量编码转换
    Java课设--俄罗斯方块Tetris
    教程,Python图片转字符堆叠图
    谈谈索引的哲学思想
    MySQL索引实战经验总结
    博客要转型啦
  • 原文地址:https://www.cnblogs.com/huangzs/p/14831910.html
Copyright © 2011-2022 走看看