美文网首页
用OC写一个死锁

用OC写一个死锁

作者: YimG | 来源:发表于2023-04-11 16:46 被阅读0次

// 定义两个串行队列

dispatch_queue_t queueA = dispatch_queue_create("com.example.queueA", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t queueB = dispatch_queue_create("com.example.queueB", DISPATCH_QUEUE_SERIAL);

// 在队列A中添加任务

dispatch_async(queueA, ^{
    NSLog(@"Task1 in QueueA");
    // 在队列A中调用同步函数,尝试获取队列B的锁
    dispatch_sync(queueB, ^{
        NSLog(@"Task2 in QueueB");
    });
    NSLog(@"Task3 in QueueA");
});

// 在队列B中添加任务

dispatch_async(queueB, ^{
    NSLog(@"Task1 in QueueB");
    // 在队列B中调用同步函数,尝试获取队列A的锁
    dispatch_sync(queueA, ^{
        NSLog(@"Task2 in QueueA");
    });
    NSLog(@"Task3 in QueueB");
});

以上示例代码中,我们创建了两个串行队列 queueA 和 queueB,然后在队列 A 中添加了一个任务,这个任务会尝试获取队列 B 的锁,然后在队列 B 中添加了另一个任务,这个任务会尝试获取队列 A 的锁。由于这两个任务都是同步函数,因此它们会在执行到获取锁的操作时被阻塞,从而导致死锁。

要避免死锁,可以通过调整任务的执行顺序,减少同步操作,或者采用更加灵活的线程控制方式(例如 GCD 中的信号量等)来解决。同时,在进行多线程开发时,也需要注意避免数据竞争等常见问题,以确保多线程程序的正确性和稳定性。

async和sync是编程中用于处理异步和同步操作的关键字。

async是异步操作的关键字,用于创建异步函数。异步函数是指一种可以在执行期间暂停并恢复的函数,通常用于处理非阻塞I/O和并发操作。在异步函数中,可以使用await来等待异步操作的结果,而不会阻塞当前线程的执行。

sync是同步操作的关键字,通常与async相对。同步操作是指一种在执行期间无法暂停并恢复的操作,通常是顺序执行的。在同步代码中,如果执行时间过长或者发生阻塞,就会导致程序失去响应。

在编程中,我们通常会使用异步操作来处理耗时的I/O或者并发操作,以充分利用计算机的多核心和异步I/O技术,提高程序的性能和并发能力。而同步操作则更适合处理简单、快速的操作,或者需要保证数据一致性和稳定性的场景。

相关文章

  • 关于iOS

    //iOS一般用oc写,也可以用swift写.目前oc还是主流,swift是未来趋势. OC的理解与特性 OC作为...

  • OC-死锁

    在同一个线程里面,调用同一个串行队列会发生死锁现象

  • 在swift项目中实现网络请求层的思路

    刚开始写swift的时候是用写OC的思路方法在写swift,OC里面写网络请求的思路是,封装一个网络请求类(以下简...

  • 用OC写一个defer

    defer defer是Swift中比较常用的一种语法,defer中的代码将会在当前的代码块结束之后调用。正如文档...

  • Swift - Discardable Result

    用OC写一个带返回值的函数,不管在OC中调用,还是在Swift中调用,不会出现报错和警告; 而用Swift写一个带...

  • Swift小笔记 | 扩展UIView使修改frame更便捷

    以前写OC的时候用习惯了,所以Swift的也搞一个:

  • iOS一些干货网址

    1.GCD死锁 http://ios.jobbole.com/82622/ 2.OC编码风格 http://obj...

  • 写一个 java 死锁玩玩

    java 死锁很容易遇到,睡不着 写一个 死锁上代码 简单明了的 死锁 。嘿嘿嘿! ok 我们看一下hotspo...

  • OC冒泡排序算法

    **面试的时候很多公司会要求写一个冒泡排序算法,于是用OC写了一个,代码如下所示 需要注意的事项:oc数组只能存放...

  • iOS制作Swift-framework,嵌入OC项目使用

    需求:有一个完整Swift项目,需要嵌入到一个OC项目中,然而Swift项目中使用了一个封装好的用OC写的网络请求...

网友评论

      本文标题:用OC写一个死锁

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