zoukankan      html  css  js  c++  java
  • 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并不能保证线程安全。

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

  • 相关阅读:
    Python_反射
    Python_面向对象_类2
    Python_面向对象_类1
    Python_logging模块
    Python_子进程管理subprocess模块
    Python_python内置加密模块
    Python_configparser模块
    Python_xml
    Python_shelve模块
    Python_shutil模块
  • 原文地址:https://www.cnblogs.com/huangzs/p/10533135.html
Copyright © 2011-2022 走看看