抛开语言限制说说什么是原子性:
原子性是指一个事物的操作是不可分割的,要么都发生,要么都不发生。
举个栗子🌰:(摘自某位不愿意透露姓名的大神)
银行的转账业务就是一个原子性的操作。
张三到银行给李四转账1000元,张三卡里原来有2000元,李四卡里原来也有两千元,那么转账的步骤应该如下:
如果张三的钱扣完,银行系统瘫痪了,怎么办呢?张三的1000块钱会被会没呢,当然不会。这时候你的钱会退回来。也就是说银行的转账业务要么成功张三(1000元)李四(3000元),要么不发生张三(2000元)李四(2000元)。
那么回到我们OC中:(这里讲的是我们的Objective-c)
看看我们的atomic和nonatomic,我们通常的理解是线程安全和非线程安全,我觉得这只在语言层面上描述原子性造成的结果。
因为atomic描述的是属性赋值,属性赋值中还包含着很多其他操作,如访问对象,赋值等等,natomic是保证这个赋值的整个过程的完整性,并且不受其他线程的干扰,要么成功要么失败。
好文推荐:
《iOS atomic 对象是线程不安全的原因以及与 nonatomic 的区别》(这个名字很奇怪😄,说白了不安全是由OC对象的引用特性造成的,可以看下)
《事务四大特征:原子性,一致性,隔离性和持久性(ACID)》