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,串行队列必须执行完一个任务再执行另一个。串行队列执行同步函数,然后同步函数又要获得串行队列去做其他事,形成死锁。

    在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
  • 相关阅读:
    Trades FZU
    H
    Coconuts HDU
    初始化Linux数据盘、磁盘分区、挂载磁盘(fdisk)
    虚拟机硬盘vmdk压缩瘦身并挂载到VirtualBox
    docker创建tomcat容器无法正常访问
    centos7一步一步搭建docker tomcat 及重点讲解
    docker配置国内阿里云镜像源
    代理模式(2):动态代理
    代理模式(1):静态代理
  • 原文地址:https://www.cnblogs.com/huangzs/p/14831910.html
Copyright © 2011-2022 走看看