什么是CAS?
⽐较并交换(compare and swap, CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据 交换操作,从⽽避免多线程同时改写某⼀数据时由于执⾏顺序不确定性以及中断的不可预知性产⽣的数据 不⼀致问题。 该操作通过将内存中的值与指定数据进⾏⽐较,当数值⼀样时将内存中的数据替换为新的 值。
上⾯的CAS返回bool告知原⼦**换是否成功。
操作的原⼦性

从上图能看到⼀个i++对应的操作是:
(1)把变量i从内存(RAM)加载到寄存器;
(2)把寄存器的值加1;
(3)把寄存器的值写回内存(RAM)
那如果有多个线程去做i++操作的时候,也就可能导致这样⼀种情况:

总结下上⾯的问题,也就是说我们整个存储的结构如下图:

我们所有的变量⾸先是存储在主存(RAM)上,CPU要去操作的时候⾸先会加载到寄存器,然后才操作, 操作好了才写会主存。 关于CPU和cache的更详细介绍可以参考:https://www.cnblogs.com/jokerjason/p/10711022.html
原⼦操作
对于gcc、g++编译器来讲,它们提供了⼀组API来做原⼦操作:



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/30056.html