【code_小马】同步与异步

我们是工程师 ——加油 !

串行与并行针对的是队列,而异步与同步针对的是线程。最大的区别在于,同步线程要阻塞当前线程,必须要等待同步线程中的任务执行完,返回以后,才能继续执行下一任务;而异步线程则不用等待。

死锁:

例如:

NSLog(@"1"); // 任务1

dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"2"); // 任务2
});

NSLog(@"3"); // 任务3

控制台输出:


死锁.png

首先执行任务1,这是肯定没问题的,
只是接下来,程序遇到了同步线程,那么它会进入
等待,等待任务2执行完,然后执行任务3。
但这是队列,有任务来,当然会将任务加到队尾,
然后遵循FIFO原则执行任务。那么,现在任务2就
会被加到最后,任务3排在了任务2前面,问题来了:

任务3要等任务2执行完才能执行,
任务2由排在任务3后面,
意味着任务2要在任务3执行完才能执行,
所以他们进入了互相等待的局面。
【既然这样,那干脆就卡在这里吧】
这就是死锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容