美文网首页Objective-C成长之路Swift编程
关于线程的问题:死锁、GCD、 多线程

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

作者: 程序猿界的cai渣渣 | 来源:发表于2017-02-20 18:16 被阅读27次
    关于死锁,学过操作系统的同学们都知道,就是不能继续执行,卡(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

    相关文章

      网友评论

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

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