IOS多线程安全-读者写者问题
多线程安全中,所谓读者写者:一个可变的对象,一个线程正对它修改,这时另个线程也过来了想修改它,同时进行吗?肯定不可以。
所以在多线程安全中,为了解决读者写者的线程安全问题,需要使用dispatch_barrier_async来保护可变对象:
var myArray :[Int][......]
多线程安全中,所谓读者写者:一个可变的对象,一个线程正对它修改,这时另个线程也过来了想修改它,同时进行吗?肯定不可以。
所以在多线程安全中,为了解决读者写者的线程安全问题,需要使用dispatch_barrier_async来保护可变对象:
var myArray :[Int][......]
多线程安全中有个概念叫:临界区,意思是有一段代码,它只能被一个线程调用,这段代码就叫临界区。
在单例模式中,我们常常会判断当前类的实例是否已经存在了, 如果已存在那就返回当前的实例,如果不存在就创建一个。
传统操作下,可以使用条件语句判断,但是多线程下就不行了,为了保证当多个线程调用[……]
NSThread类,直接操作线程,适合将一个需要长时间运行的任务放到一个子线程中。
NSThread.detachNewThreadSelector("go", toTarget: self, withObject: nil) private func go(){ print[......]
NSOperation是苹果为我们封装自GCD的一个类,操作方法很简便,适合对复杂的多线程进行操作,少量的多线程使用,还是用GCD速度快。
//使用系统提供的继承于NSOperation的子类 let operation = NSBlockOperation{ //需要执行的操作,比如[......]
IOS多线程编程中,GCD是一个很方便的库,它的核心是GCD队列,所有操作都围绕着队列。
1、GCD中的三种队列
GCD中三种队列:主队列、全局队列、自定义队列。
//创建一个全局队列,队列的优先级(Priority)为Default,第二个参数暂时保留,传0即可 let[......]