美文网首页
atomic与线程安全

atomic与线程安全

作者: Jimmy_Neo | 来源:发表于2018-11-30 09:24 被阅读0次

iOS开发中,property用atomic修饰并不是真正的线程安全

创建

@property(atomic, assign)int number;

开启异步线程同时对self.number进行操作

dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [self operationA];

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [self operationB];

    });

//操作A

-(void)operationA{

    for(int i = 0; i <10; i ++)

    {

        self.number = self.number+1;

        NSLog(@"operationA: %d\n", self.number);

    }

}

//操作B

-(void)operationB{

    for(int i = 0; i <10; i ++)

    {

        self.number = self.number+1;

        NSLog(@"operationB: %d\n", self.number);

    }

}

执行结果

2018-11-30 09:19:46.606098+0800 Runtime[89190:19183050] operationA: 1

2018-11-30 09:19:46.606098+0800 Runtime[89190:19183052] operationB: 2

2018-11-30 09:19:46.606330+0800 Runtime[89190:19183050] operationA: 3

2018-11-30 09:19:46.606375+0800 Runtime[89190:19183052] operationB: 4

2018-11-30 09:19:46.606415+0800 Runtime[89190:19183050] operationA: 5

2018-11-30 09:19:46.606456+0800 Runtime[89190:19183052] operationB: 6

2018-11-30 09:19:46.606492+0800 Runtime[89190:19183050] operationA: 7

2018-11-30 09:19:46.606539+0800 Runtime[89190:19183052] operationB: 8

2018-11-30 09:19:46.606971+0800 Runtime[89190:19183052] operationB: 9

2018-11-30 09:19:46.607266+0800 Runtime[89190:19183050] operationA: 10

2018-11-30 09:19:46.607485+0800 Runtime[89190:19183052] operationB: 11

2018-11-30 09:19:46.607670+0800 Runtime[89190:19183050] operationA: 12

2018-11-30 09:19:46.607981+0800 Runtime[89190:19183052] operationB: 13

2018-11-30 09:19:46.608171+0800 Runtime[89190:19183050] operationA: 14

2018-11-30 09:19:46.608554+0800 Runtime[89190:19183052] operationB: 15

2018-11-30 09:19:46.608684+0800 Runtime[89190:19183050] operationA: 16

2018-11-30 09:19:46.609233+0800 Runtime[89190:19183052] operationB: 17

2018-11-30 09:19:46.609292+0800 Runtime[89190:19183050] operationA: 18

2018-11-30 09:19:46.610658+0800 Runtime[89190:19183052] operationB: 19

2018-11-30 09:19:46.610914+0800 Runtime[89190:19183050] operationA: 20


self.number打印结果从1到20且没有重复数字表示在执行numbe的setter方法时是线程安全的,但是operationA操作self.number时,operationB也同时能操作表示atomic并不能保证真正的线程安全.

相关文章

  • iOS 中atomic与nonatomic区别,以及atomic

    atomic 与 nonatomic 区别 nonatomic:非原子属性,线程不安全的,效率高atomic:原子...

  • nonatomic和atomic的区别

    nonatomic:非线程安全 atomic:线程安全 atomic对属性的set 和get方法进行加锁,保证当前...

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

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

  • 面试与问题记录 3

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

  • atomic与线程安全

    iOS开发中,property用atomic修饰并不是真正的线程安全 创建 @property(atomic, a...

  • atomic与线程安全

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

  • atomic与线程安全

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

  • iOS中属性关键词

    1.原子性与非原子性 atomic:原子性,只有一个线程可以同时访问实例。atomic 是线程安全的(因为会为se...

  • 题库整理(一)

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

  • iOS中的“锁事”

    抛砖引玉 说到锁不得不提线程安全,说到线程安全,作为iOS程序员又不得不提 nonatomic 与 atomic ...

网友评论

      本文标题:atomic与线程安全

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