ios 原子性和非原子性

原子性和非原子行相对于线程的安全来讲

nonatomic:非原子属性,线程不安全的,效率高

atomic:原子属性,线程安全的,效率相对低。

原子属性是一种单(线程)写多(线程)读的多线程技术,不过可能会出现脏数据

atomic属性内部的锁称为 自旋锁

凡是线程安全的对象,内部肯定会加锁。

自旋锁和互斥锁 

相同点:都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。

不同点: 

互斥锁:如果共享数据已经有其他线程加锁了,线程会进入休眠状态等待锁。一旦被访问的资源被解锁,则等待资源的线程会被唤醒。

自旋锁:如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。

自旋锁的效率高于互斥锁。





atomic属性内部的锁称为 互斥锁 ,并不是自旋锁。

atomic的实现:

- (void)setCurrentImage:(UIImage *)currentImage

{

@synchronized(self) {

if (_currentImage != currentImage) {

[_currentImage release];

_currentImage = [currentImage retain];

// do something

}

}

}

- (UIImage *)currentImage

{

@synchronized(self) {

return _currentImage;

}

}

atomic 的setter方法中 多了一个 @synchronized(self) {},这个语句的功能是:等待当前对象操作完毕并合成确定值,所以是互斥锁




@synchronized(self)的用法:

@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。


https://www.cnblogs.com/jukaiit/p/5570056.html

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

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,782评论 0 11
  • 前言 iOS开发中由于各种第三方库的高度封装,对锁的使用很少,刚好之前面试中被问到的关于并发编程锁的问题,都是一知...
    喵渣渣阅读 3,772评论 0 33
  • 接触缘由:因为易效能,学习定青蛙,吃青蛙,去过想要的生活。因为叶武滨老师,接触GTD理念,从《吃掉那只青蛙》这本书...
    凉心_0939阅读 122评论 0 0
  • 你想成为一名优秀的领导者吗?或者成为一名优秀的人吗?那么你就要学会像优秀的人或优秀的领导者一样去思考。但是,最好我...
    金鱼爸爸阅读 678评论 2 3
  • ——《日 月》 9
    LuckySL阅读 225评论 0 0