当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。就好比几个人在同一时间修改同一个表格造成的数据错乱。
解决多线程安全问题的方法
一:互斥锁(同步锁)
@synchronized(object){
//需要锁定的代码
}
判断的时候锁对象要存在,如果代码中只有一个地方需要加锁,大多都使用self作为锁对象,这样可以避免单独再创建一个锁对象。
加了互斥锁的代码,当新线程访问时,如果发现其他线程正在执行锁定的代码,新线程就会进入休眠。
二:自旋锁
加了自旋锁,当新线程访问代码时,如果发现有其他线程正在锁定代码,新线程会用死循环的方式,一直等待锁定的代码执行完成。相当于不停尝试执行代码,比较消耗性能。
属性修饰atomic本身就有一把自旋锁。
下面说一下属性修饰nonatomic和atomic
网友评论