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并不能保证线程安全。

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

  • 相关阅读:
    c++ struct 使用
    c++数组、字符串操作
    c++ List、Vector、Stack、Queue使用
    十三、哈希表
    十二、234树
    十一、红黑树
    十、哈夫曼编码
    九、二叉树
    八、高级排序
    七、递归
  • 原文地址:https://www.cnblogs.com/huangzs/p/10533135.html
Copyright © 2011-2022 走看看