美文网首页selector
atomic与线程安全

atomic与线程安全

作者: LamSpeech | 来源:发表于2020-03-23 14:57 被阅读0次

atomic在日常开发中是个很少使用,也是个很容易出现错误的知识点,那么atomic能够保证线程安全吗?

答案是不能,至于为什么这么说我们可以从以下几点来看:


1、什么是线程安全

多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。

2、线程安全的三个核心体现

原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性:程序执行的顺序按照代码的先后顺序执行。

3、举一个最简单的例子

假设有A/B/C三个线程和一个使用atomic修饰的属性,线程A调了属性的getter方法,与此同时线程B 、线程C都调了属性的setter方法 。                        

那么最后A得到的值,有3种可能:可能是BC赋值之前的原始值,也可能是B赋值的值,也可能是C赋值的值。                                                                

同时,最终这个属性的值,可能是B赋值的值,也有可能是C赋值的值。

最后我们可以得出一个结论,atomic是不能保证属性线程安全的,因为它修饰的属性并不能完全符合线程安全的三个核心体现。

相关文章

  • iOS 中atomic与nonatomic区别,以及atomic

    atomic 与 nonatomic 区别 nonatomic:非原子属性,线程不安全的,效率高atomic:原子...

  • nonatomic和atomic的区别

    nonatomic:非线程安全 atomic:线程安全 atomic对属性的set 和get方法进行加锁,保证当前...

  • 问题:使用atomic一定是线程安全的吗?

    atomic不是绝对的线程安全。atomic的本意是指属性的存取方法是线程安全的,并不保证整个对象是线程安全的。 ...

  • 面试与问题记录 3

    一 .nonatomic 与atomic 区别,atomic是绝对线程安全吗 ?常用的锁有那些? 答: nonat...

  • atomic与线程安全

    iOS开发中,property用atomic修饰并不是真正的线程安全 创建 @property(atomic, a...

  • atomic与线程安全

    本篇文章采用的源码是objc4-781版本 使用atomic一定是线程安全的吗? atomic不是绝对的线程安全。...

  • atomic与线程安全

    atomic在日常开发中是个很少使用,也是个很容易出现错误的知识点,那么atomic能够保证线程安全吗? 答案是不...

  • iOS中属性关键词

    1.原子性与非原子性 atomic:原子性,只有一个线程可以同时访问实例。atomic 是线程安全的(因为会为se...

  • 题库整理(一)

    1.atomic和nonatomic的区别?atomic一定是线程安全的吗?atomic如何实现atomic? a...

  • iOS中的“锁事”

    抛砖引玉 说到锁不得不提线程安全,说到线程安全,作为iOS程序员又不得不提 nonatomic 与 atomic ...

网友评论

    本文标题:atomic与线程安全

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