长路漫漫,唯剑作伴--问题答案
Posted 来事啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了长路漫漫,唯剑作伴--问题答案相关的知识,希望对你有一定的参考价值。
一、使用atomic一定是线程安全的吗?
-
回答
-
不是
-
对于
atomic
的属性,系统生成的 getter/setter 会保证 get、set 操作的完整性,不受其他线程影响。比如,线程 A 的 getter 方法运行到一半,线程 B 调用了 setter:那么线程 A 的 getter 还是能得到一个完好无损的对象。 -
对于nonatomic的属性,当其中一个线程正在改写某属性值的时候,另外一个线程也许会突然闯入,把尚未修改好的属性值读取出来。发证这种情况时,线程读取到的属性值肯能不对。
-
当使用atomic时,虽然对属性的读和写是原子性的,但是仍然可能出现线程错误:当线程A进行写操作,这时其他线程的读或者写操作会因为等该操作而等待。当A线程的写操作结束后,B线程进行写操作,然后当A线程需要读操作时,却获得了在B线程的值,这就破坏了线程安全,如果有线程C在A线程读操作之前release了该属性,那么还会导致程序崩溃。所以仅仅使用atomic并不会使得线程安全,我们还要为线程添加lock来确保线程的安全。
-
其实无论是否是原子性的只是针对于getter和setter而言,比如用atomic去操作一个NSMutableArray ,如果一个线程循环读数据,一个线程循环写数据,肯定会产生内存问题,这个就跟getter和setter就木有关系了。
-
-
atomic,synchronized,NSLock,pthread mutex,OSSpinLock的差别
- 大飒飒发顺丰
以上是关于长路漫漫,唯剑作伴--问题答案的主要内容,如果未能解决你的问题,请参考以下文章