多线程访问共享资源

互斥锁和自旋锁的区别:互斥锁会让线程进入休眠装备(就绪状态)等待上一个线程执行完操作再去执行,自旋锁会用死循环的方式,一直等待上一个线程是否执行完,执行完就不执行自己的操作。

模拟卖票

有两个线程同时卖票,输出结果会出现剩余 19 19 18 17.。。的情况

出现两个19是因为线程在执行代码的时候是由进程操作的,进行线程之间来回切换,当进程在第一个线程上执行的到-1之前时,切换到了第二个线程,第一个线程会记录之前的数据,当线程2执行完-1,总的票数变成了19,但是线程1记录的还是20,进程切换到线程1执行代码的时候还是会输出19,就出现了错误

解决方法:添加互斥锁,互斥锁作用是锁对象,对象需要满足:1.必须继承于NSObject 2.必须是全局的,互斥锁等于是利用了线程同步的原理,多条线程按照顺序执行。


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

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,164评论 0 23
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,728评论 0 11
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,482评论 1 15
  • 【作者】蒋萍 【派别】玉印派 【导师】王玉印 高考的选词填空一直是难点,但是导图分解后很清晰,就是花费时间有点长。
    文魁大脑一鱼影阅读 200评论 3 1
  • 是什么促使你选择去做一名海外志愿者? 目的是想和朋友出去在做公益活动的同时体验一下异国风情,因为印度是一个古老而神...
    一夜晴空_阅读 232评论 0 0