美文网首页
ios 原子性和非原子性

ios 原子性和非原子性

作者: my我的 | 来源:发表于2018-02-27 08:55 被阅读297次

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

    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

    相关文章

      网友评论

          本文标题:ios 原子性和非原子性

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