美文网首页
atomic和noatomic原理分析

atomic和noatomic原理分析

作者: 饭饭男 | 来源:发表于2017-11-10 18:06 被阅读376次

atomicnoatomic的区别是什么?
刚刚学iOS的时候是这样认识的:atomic是线程安全的,但它运行效率慢,noatomic不是线程安全的它他效率高。看了atomicnoatomic内部实现后才认识到实际上atomic只是保证了seter getter方法的原子性 noatomic不能保证seter getter方法的原子性。

atomic的seter getter内部实现

- (void)setCurrentImage:(UIImage *)currentImage
{
    @synchronized(self) {
        if (_currentImage != currentImage) {
            [_currentImage release];
            _currentImage = [currentImage retain];

        }
    }
}

- (UIImage *)currentImage
{
    @synchronized(self) {
        return _currentImage;
    }
}

atomic的seter getter内部实现是用了互斥锁来保证seter getter方法在多线程中的安全,但atomic修饰的对象是我们自定义的,可能并没有加锁,在多线程中atomic修饰对象并不能保证线程安全。

nonatomic对象setter和getter方法的实现:

- (void)setCurrentImage:(UIImage *)currentImage
{
    if (_currentImage != currentImage) {
        [_currentImage release];
        _currentImage = [currentImage retain];

    }
}
- (UIImage *)currentImage
{
    return _currentImage;
}

nonatomic对象setter和getter方法的实现并么有加互斥锁,所以nonatomic修饰的对象是非线程安全的,同时nonatomic对象setter和getter方法也是非线程安全的,但也正因为没有互斥锁所以性能要比atomic好

如果既要atomic修饰的对象线程安全也要atomic的seter getter方法具有原子性,那就需要给atomic修饰的对象加互斥锁,但这会进一步降低atomic的性能。

https://academy.realm.io/posts/tmi-objective-c-property-attributes/

相关文章

  • atomic和noatomic原理分析

    atomic和noatomic的区别是什么?刚刚学iOS的时候是这样认识的:atomic是线程安全的,但它运行效率...

  • atomic和noatomic

    atomic 用于保证属性的getter setter方法的原子属性操作,相当于在getter和setter内部增...

  • atomic 和noatomic

    nonatomic:非原子的,非线程安全的,适合内存小的移动设备atomic:原子的,线程安全的 不写的话默认就是...

  • iOS atomic noatomic

    iOS atomic noatomic atomic:可以保证属性的 setter 和 getter 都是原子性操...

  • 多线程--互斥锁和自旋锁

    自旋锁(atomic 原子锁) OC在定义属性时,经常会提到noatomic和atomic的两种选择.相信大家都知...

  • iOS中的内存管理

    一.读写安全 1.atomic与noatomic 2.pthead_rwlock 3.dispatch_barri...

  • 阻塞队列LinkedBlockingQueue原理简析

    前言 分析LinkedBlockingQueue的实现原理前,需要先了解ReentrantLock 和Atomic...

  • 2019年iOS面试题《一》

    讲讲你对noatomic & nonatomic的理解: atomic与nonatomic内部实现的区别只是ato...

  • iOS - 基础

    iOS 属性修饰关键字都有哪些? atomic 原子性访问,对属性赋值的时候加锁 noatomic 非原子...

  • iOS atomic 和nonatomic

    atomic:为setter方法加锁,原子属性。线程安全,消耗大量的资源。 noatomic:非原子属性,不会为s...

网友评论

      本文标题:atomic和noatomic原理分析

      本文链接:https://www.haomeiwen.com/subject/duximxtx.html