• atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?


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

        @property (atomic, assign) int intA;

        

        //线程A

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

        {

            self.intA = self.intA + 1;

            NSLog(@"Thread A: %d ", self.intA);

        }

        

        //线程B

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

        {

            self.intA = self.intA + 1;

            NSLog(@"Thread B: %d ", self.intA);

        }

    self.intA 是原子操作,但是self.intA = self.intA + 1这个表达式并不是原子操作。
    所以线程是不安全的。
    threadA 在执行表达式 self.intA之后 self.intA = self.intA + 1;并没有执行完毕
    此时threadB 执行self.intA = self.intA + 1;
    再回到threadA时,self.intA的数值就被更新了;所以仅仅使用atomic并不能保证线程安全。

    需要用互斥锁来保证线程安全性。

  • 相关阅读:
    检测一个对象方法是否存在
    非堵塞 延迟脚本 高性能
    移动开发 相关 备忘
    元素透明 渐变函数
    cookie
    media query 单位
    前端入门可参考《如何教会非计算机专业的女友写代码》
    JQ判断复选框是否选中
    聊天记录
    JS获取文本值
  • 原文地址:https://www.cnblogs.com/huangzs/p/10533135.html
Copyright © 2020-2023  润新知