美文网首页
atomic的实现机制;为什么不能保证绝对的线程安全

atomic的实现机制;为什么不能保证绝对的线程安全

作者: iOS心安 | 来源:发表于2020-12-11 13:13 被阅读0次

    使用atomic 修饰属性,编译器会设置默认读写方法为原子读写,并使用互斥锁添加保护。

    单独的原子操作绝对是线程安全的,但是组合一起的操作就不能保证。

    - (void)competition {
    self.intSource = 0;
    
    dispatch_async(queue1, ^{
    for (int i = 0; i < 10000; i++) {
    self.intSource = self.intSource + 1;
    }
    });
    
    dispatch_async(queue2, ^{
    for (int i = 0; i < 10000; i++) {
    self.intSource = self.intSource + 1;
    }
    });
    }
    

    最终得到的结果肯定小于20000。当获取值的时候都是原子线程安全操作,比如两个线程依序获取了当前值 0,于是分别增量后变为了 1,所以两个队列依序写入值都是 1,所以不是线程安全的。
    解决的办法应该是增加颗粒度,将读写两个操作合并为一个原子操作,从而解决写入过期数据的问题。

    作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:711315161,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

    相关文章

      网友评论

          本文标题:atomic的实现机制;为什么不能保证绝对的线程安全

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