GCD之死锁

简介:

GCD相当好用,但用不好就会死锁,始终要记着这样一句秘籍:

不要在串行队列放dispatch_sync、dispatch_apply

下面看几个例子



// 防死锁秘籍:不要在串行队列放dispatch_sync、dispatch_apply

   // 死锁  主线程调用dispatch_apply

    dispatch_async(dispatch_get_main_queue(), ^{

        dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) {

            NSLog(@"%ld",i);

            NSLog(@"%d",55);

        });

      });

    NSLog(@"%d",999);

    //死锁 主线程调用dispatch_apply

    dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) {

        NSLog(@"%ld",i);

        NSLog(@"%d",777);

    });

    

    

   //不死锁

    dispatch_queue_t queue=  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_apply(5, queue, ^(size_t i) {

        NSLog(@"%ld",i);

         NSLog(@"%d",66);

    });

    NSLog(@"%d",88);

    //不死锁

    dispatch_async(queue, ^{

        dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) {

            NSLog(@"%ld",i);

        });

    });

//    //不死锁

    dispatch_async(queue,^{

        dispatch_sync(dispatch_get_main_queue(), ^{

            NSLog(@"test");

        });

    });

    //死锁

    dispatch_sync(queue,^{

        dispatch_sync(dispatch_get_main_queue(), ^{

            NSLog(@"test");

        });

    });

相关文章
|
4月前
|
存储 安全 算法
Wound/Wait死锁安全的互斥锁设计 【ChatgGPT】
Wound/Wait死锁安全的互斥锁设计 【ChatgGPT】
|
7月前
|
安全 Python
Python多线程中的死锁与递归锁
Python多线程中的死锁与递归锁
|
Linux
一文读懂Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
Hello、Hello大家好,我是木荣,今天我们继续来聊一聊Linux中多线程编程中的重要知识点,详细谈谈多线程中同步和互斥机制。
8593 1
一文读懂Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
深入理解JUC:第五章:CyclicBarrier循环栅栏
深入理解JUC:第五章:CyclicBarrier循环栅栏
121 0
深入理解JUC:第五章:CyclicBarrier循环栅栏
|
测试技术 Linux Python
一篇文章理清Python多线程同步锁,死锁和递归锁
公众号:pythonislover 前面说到过python多线程的基本使用,大概的内容有几点 1.创建线程对象 t1 = threading.Thread(target=say,args=('tony',)) 2.启动线程 t1.start() 后面又说了两个点就是join和守护线程的概念 但是不知道大家有没有注意到一点就是前面说的两个功能是相互独立的,相互不干涉的,不会用到同享的资源或者数据,如果我们多个线程要用到相同的数据,那么就会存在资源争用和锁的问题,不管在什么语言中,这个都是不能避免的。
2756 0
GCD处理多线程同步操作 韩俊强的博客
原文地址: http://blog.csdn.net/qq_31810357/article/details/78906308 未经许可,严禁转载! GCD使用 dispatch_group_notify、dispatch_group_enter、dispatch_group_leave处理多线程同步操作 一、简介 dispatch_group_enter:通知group,下面的任务马上要放到group中执行。
1174 0