美文网首页
Automic 原子属性

Automic 原子属性

作者: qjsxq | 来源:发表于2020-06-14 23:45 被阅读0次

给属性加上atomic 修饰 可以保证属性的setter 和 getter 都是原子性操作,也就是保证setter 和 getter 内部都是线程同步的。
原因是底部加了自旋锁,源码如下:

// getter 方法
id objc_getProperty(id self, SEL _cmd, ptrdiff_t offset, BOOL atomic) {
    if (offset == 0) {
        return object_getClass(self);
    }

    // Retain release world
    id *slot = (id*) ((char*)self + offset);
    if (!atomic) return *slot;
        
    // Atomic retain release world 加锁
    spinlock_t& slotlock = PropertyLocks[slot];
    slotlock.lock();
    id value = objc_retain(*slot);
    slotlock.unlock();
    
    // for performance, we (safely) issue the autorelease OUTSIDE of the spinlock.
    return objc_autoreleaseReturnValue(value);
}
//setter方法
 if (!atomic) {
        oldValue = *slot;
        *slot = newValue;
    } else {
        spinlock_t& slotlock = PropertyLocks[slot];
        slotlock.lock();
        oldValue = *slot;
        *slot = newValue;        
        slotlock.unlock();
    }

相关文章

  • Automic 原子属性

    给属性加上atomic 修饰 可以保证属性的setter 和 getter 都是原子性操作,也就是保证setter...

  • 【Java源码计划】AtomicInteger<rt.ja

    AtomicInteger 这个类是Automic包下的类,用于提供对应类型的原子操作 这个类提供了整形的原子更新...

  • iOS 中automic属性关键字使用的是什么锁?

    声明属性时使用automic,系统究竟是使用的哪个锁?查看OC源码如下:源码 可以看到, 对于automic,系统...

  • JDK学习笔记之AtomicInteger

    AtomicInteger 可以算是一类Automic类的代表,在多线程的运行环境中,提供原子操作。 Atomic...

  • 【Java源码计划】AtomicBoolean<rt.ja

    AtomicBoolean 这个类是Automic包下的类,用于提供对应类型的原子操作 源码解析 这个类提供了一个...

  • 原子属性

    非原子属性nonatomic 和原子属性atomic 原子属性atomic:就是为了保证这个属性的安全性(线程安全...

  • 8线程程序间的通信

    原子核非原子属性的选择 OC在定义属性时有nonatomic和atomic两种 atomic:原子属性,为sett...

  • 原子属性

    1.原子属性是线程安全的atomic,但并不是绝对的安全 原子属性只是保护的set和get方法,比如array,他...

  • iOS atomic和nonatomic

    nonatomic:非原子属性,线程不安全的,效率高atomic:原子属性,线程安全的,效率相对低。原子属性是一种...

  • ios 原子性和非原子性

    原子性和非原子行相对于线程的安全来讲 nonatomic:非原子属性,线程不安全的,效率高 atomic:原子属性...

网友评论

      本文标题:Automic 原子属性

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