美文网首页
2018-05-22

2018-05-22

作者: Gunks | 来源:发表于2018-05-22 22:29 被阅读0次
  • nonatomic的内存管理语义是非原子性的,非原子性的操作本来就是线程不安全,而atomic的操作是原子性的,但并不意味着他就是线程安全的,它会增加正确的几率,能够更好的避免线程错误,但仍旧是不安全的。

nonatomic的实现:
- (void)setCurrentImage:(UIImage *)currentImage{
    if (_currentImage != currentImage) {
        [_currentImage release];
        _currentImage = [currentImage retain];
            
        // do something
    }
}
- (UIImage *)currentImage{
    return _currentImage;
}

atomic的实现:
- (void)setCurrentImage:(UIImage *)currentImage{
    @synchronized(self) {
        if (_currentImage != currentImage) {
            [_currentImage release];
            _currentImage = [currentImage retain];
                    
            // do something
        }
    }
}

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

当使用atomic时,虽然对属性的读和写是原子性的,但是仍然可能出现线程错误:当线程A进行写操作,这时其他线程的读或者写操作会因为等该操作而等待。当A线程的写操作结束后,B线程进行写操作,所有这些不同线程上的操作都将依次顺序执行——也就是说,如果一个线程正在执行 getter/setter,其他线程就得等待。如果有线程C在A线程读操作之前release了该属性,那么还会导致程序崩溃。所以仅仅使用atomic并不会使得线程安全,我们还要为线程添加lock来确保线程的安全。
  • 更准确的说应该是读写安全,但并不是线程安全的,因为别的线程还能进行读写之外的其他操作。线程安全需要开发者自己来保证。

相关文章

  • 2018-05-23

    2018-05-22 vavawing 2018-05-22 23:13 · 字数 513 · 阅读 4 · 日记...

  • 2018-05-22

    2018-05-22 戴师傅简书作者 2018-05-22 22:05 打开App (稻盛哲学学习会)打卡第62天...

  • Array.apply(null, {length: 5})

    2018-05-22 创建 先说结果: Array.apply(null, {length: 5}) length...

  • TextView使用android:autoLink="

    2018-05-22 遇到的一点小问题 android:textIsSelectable="true" 项目里有...

  • 2018-05-22

    2018-05-22 TCD提案 姓名:黄太平 部门:四分厂 岗位:机修 提案时间 2018.5.22 ...

  • iOS多线程.md

    2018-05-22 iOS多线程-概念iOS多线程:『pthread、NSThread』详尽总结 多线程-概念图...

  • 一个人的成败看脾气

    2018-05-22 06:15 · 字数 825 · 阅读 155 · 情绪能量 如果你是对的,没有必要发脾气;...

  • 张氏琥珀核桃仁出炉记

    2018-05-22 晴 周二 总喜欢心血来潮,做一些小吃。 昨晚看到茶几盒...

  • 日精进打卡(第319天)

    2018-05-22 姓名:李义 公司:........ 组别:259期利他二组 【知~学习】 背诵 六项精进大纲...

  • 我的ssh框架学习-排错日志

    1.缺少包2018-05-22 这是由于缺少Hibernate commons注释库引起的。 解决方法: 加入hi...

网友评论

      本文标题:2018-05-22

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