多线程访问共享资源

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

模拟卖票

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

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

多线程访问共享资源_第1张图片

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


多线程访问共享资源_第2张图片

你可能感兴趣的:(多线程访问共享资源)