![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程安全
文章平均质量分 85
lllee111
这个作者很懒,什么都没留下…
展开
-
多线程编程CAS与CAS中的ABA问题
这其中,第一次扣款时,CAS读取原数据值为100,与现有值100相等,进行交换,将0交换到余额中,第二次扣款时的CAS本来应该将原数据100与0比较,发现不相等,就放弃交换,但在这当中,发生了一次100的入账,导致第二次CAS将后来的100与原有的100进行比较,发现相等,于是再次将0交换到余额中,导致张三被多扣了100块钱,这就是ABA问题。这样看可能不太好理解。通过判断内存中的值是否与原有值相等,来判断变量是否被改变过,如果被改变了,那么就不进行修改,如果没有被修改过,就执行交换操作。原创 2023-03-10 17:51:36 · 98 阅读 · 0 评论 -
线程安全问题的原因及常用解决方法
这个问题是由于编译器的优化导致的。当线程A高频率的读取内存中的同一个数据,并且每次读取到的数据都是一样的,编译器就会将读内存操作优化成 读寄存器操作,因为读取寄存器中的数据要比读取内存中的数据快很多,这时,如果线程B修改了这个数据,线程A由于是在寄存器中读取这个数据,就会识别不到内存中的数据修改,那么这个修改对于线程A来说就是无效的。原创 2023-03-02 19:14:31 · 304 阅读 · 0 评论