Objective-C成长之路Swift编程

关于线程的问题:死锁、GCD、 多线程

2017-02-20  本文已影响27人  程序猿界的cai渣渣
关于死锁,学过操作系统的同学们都知道,就是不能继续执行,卡(qia)住在当前状态值。在代码中表现的就是:crash,崩溃,在软件上就是闪退、卡住了。那么,死锁是怎么造成的又应该怎么避免呢?接下来就是见证奇迹的时刻!!

死锁

1、直接在主队列中提交同步任务。
2、在主队列的异步任务执行任务中提交同步任务到主队列。
3、谨慎使用dispath_sync函数。
如图所示:
死锁状态:

使用:dispath_sync函数

死锁
输出结果

使用异步:dispath_async函数

正常
输出结果

GCD

使用GCD主要是应用于多线程的使用,比如:网络请求数据,而UI的界面加载和刷新则需要在主线程里面进行。此处啰嗦一点:在使用MBProgress这个提示框时候,就需要在主线程中使用。
如图:(借用别人的图,之后有详细的讲解链接奉上)


GCD使用
输出结果

这段代码也实现了1234正常的顺序,登录--付款--下载--更新UI的功能,首先说明一下打印结果当中共出现了三个线程,但是注意每一次点击事件我们只用到两个线程,一个是主线程(系统自动创建,)一个是71行我们自己创建的子线程,至于打印结果出现了number = 3这个线程的问题是因为GCD透明优化和系统的原因,我们不用管理这些问题.只要清楚每次点击事件只有两个线程,两个队列(主队列和global)就可以了。

图二:
GCD使用
输出结果
队列
队列问题可以查看以下链接内容

链接:http://www.cnblogs.com/LDSmallCat/p/4910080.html
链接:http://www.cnblogs.com/LDSmallCat/p/4910158.html
此处的问题相信读者可以看明白。如若有错误请喷并指正!!

附上链接:

GCD:https://github.com/Vickeywei/GCD

上一篇下一篇

猜你喜欢

热点阅读