什么是线程安全呢?
线程安全:多线程操作共享数据不会出现想不到的结果就是线程安全的,否则,是线程不安全的。
那么最后来总结下
nonatomic肯定不是线程安全的
atomic修饰后,我们为这个对象加了自旋锁, 不会出现多线程同时修改这个值的。至于这个值最终是什么,无法确定,是因为你不知道多线程的调用 顺序,也就无法判断最终的值是什么。 Atomic不能保证对象多线程的安全,它只是能保证你访问的时候给你返回一个完好无损的Value而已。atomic:系统生成的 getter/setter 会保 证 get、set 操作的完整性,不受其他线程影响。getter 还是能得到一个完好无损的对象(可以保证数据的完整性),但这个对象在多线程的情 况下是不能确定的
如果有多个线程同时调用setter的话,不会出现某一个线程执行完setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁 一样,每次只能有一个线程调用对象的setter方法,所以可以保证数据的完整性。
atomic所说的线程安全只是保证了getter和setter存取方法的线程安全,并不能保证整个对象是线程安全的。
仅仅使用atomic并不会使得对象线 程安全,我们还要为对象线程添加互斥锁lock来确保线程的安全。可以参考之前写的《c++原子变量,互斥锁与线程安全》。
死锁产生的四个必要条件:
互斥:一个资源每次只能被一个进程使用(资源独立)。<