美文网首页
5、使用atomic一定是线程安全的吗?

5、使用atomic一定是线程安全的吗?

作者: 婕妤露 | 来源:发表于2017-12-04 10:31 被阅读0次

atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值。但这也只是读写的锁定。跟线程安全其实还是差一些。

@interface MONPerson : NSObject 
@property (copy) NSString * firstName; 
@property (copy) NSString * lastName; 
- (NSString *)fullName; 
@end

Thread A:
p.firstName = @"Rob";
Thread B:
p.firstName = @"Robert";
Thread A:
label.string = p.firstName; // << uh, oh -- will be Robert

但是如果有个C也在写,D在读取,D会读到一些随机的值(ABC修改的值),这就不是线程安全的了。最好的方法是使用lock。

Thread A:
[p lock]; // << wait for it… … … …
// Thread B now cannot access 
pp.firstName = @"Rob";
NSString fullName = p.fullName;
[p unlock];
// Thread B can now access plabel.string = fullName;

Thread B:
[p lock]; // << wait for it… … … …
// Thread A now cannot access p…
[p unlock];

atomic有个很大的问题是很慢,要比nonatomic慢20倍。
当然最后建议这种数值数值变化可以让服务器来做。

相关文章

  • atomic与线程安全

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

  • 题库整理(一)

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

  • iOS 面试提(二)

    使用atomic一定是线程安全的吗? 不是,atomic仅针对于getter和setter方法调用的时候,此时at...

  • 5、使用atomic一定是线程安全的吗?

    atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值。但这也只是读写的锁...

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

    一般当我们想要保证对象属性的线程安全的时候可以在定义属性的时候用 atomic 关键字来修饰,那么这篇文章让我们来...

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

    线程安全 1.线程安全的概念多条线程同时工作的情况下,通过运用线程锁,原子性等方法避免多条线程因为同时访问同一快内...

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

    这个问题很少遇到,但是答案当然不是。atomic在set方法里加了锁,防止了多线程一直去写这个property,造...

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

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

  • 面试与问题记录 3

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

  • atomic与线程安全

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

网友评论

      本文标题:5、使用atomic一定是线程安全的吗?

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