原子属性原理-多线程的数据安全

  • @property属性修饰符中有atomicnonatomic
  • nonatomic : 非原子属性 适合内存小的移动设备
  • atomic : 原子属性(默认) 需要消耗大量的资源
    线程安全,针对多线程设计,默认值
    保证同一时间内只有一个线程能够写入(但是同一个时间多个线程都可以读取)atomic本身就有一把自旋锁

自旋锁: 单写多读-->单个线程写入,多个线程读取

虽然自旋锁可以保护公共资源不被多条线程下同时写入,但允许多条线程下同时读取,并不能解决公共资源数据混乱的问题

-iOS开发的建议:
所有属性都声明为nonatomic
尽量避免多线程抢夺同一块资源
尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减小移动客户端压力

  • 模拟原子属性的实现:
#import "ViewController.h"

@interface ViewController ()

@property (atomic,copy) NSString *name;

@end

@implementation ViewController

// 如果即重写setter方法又重写setter方法,系统就不再为我们生成带下划线的成员变量
@synthesize name = _name;

- (void)viewDidLoad {
    [super viewDidLoad];
}

// 模拟原子属性

// 写
- (void)setName:(NSString *)name{
    
    // 通过互斥锁,实现同一时间只有一个线程可以操作
    @synchronized (self) {
        
        _name = name;
    }
}
// 读
- (NSString *)name{
    
    return _name;
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一: 多线程的基本概念1.同步与异步的概念1.1 同步 必须等待当前语句执行完毕,才可以执行下一个语句。1.2...
    程序_猿阅读 3,584评论 1 16
  • 一、多线程基础 基本概念 进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且...
    AlanGe阅读 571评论 0 0
  • 接着上节 mutex,本节主要介绍atomic的内容,练习代码地址。本文参考http://www.cplusplu...
    jorion阅读 73,904评论 1 14
  • 第三章 Java内存模型 3.1 Java内存模型的基础 通信在共享内存的模型里,通过写-读内存中的公共状态进行隐...
    泽毛阅读 4,404评论 2 21
  • 掬一串午后的阳光 蘸着书韵茶香 浇养一颗素心 一半沐人间烟火 一半听曲水流觞 品咂盈盈思慕的忐忑 静写涓涓叩打的平...
    周延龙阅读 125评论 0 0