索引
继续看并发的课程文章。
今天了解了并发三大问题都是如何出现的。
可见性
多核CPU执行程序时,多个线程在不同CPU核心上执行,每个核都有自己的缓存。当线程修改变量后,并不一定会及时将缓存拷贝回内存,也不一定每次都从内存读取新得变量值,所以会发生A线程修改1核的缓存变量,B线程在2核心上无法看到这个修改。
有序性
这个是因为cpu对指令的重排引入的,cpu重排指令是为了性能,但是因此给软件开发引入的坑却让软件开发者自己解决。
原子性
高级编程语言中的一句代码,感觉貌似是一个指令,但是在cpu执行时却需要好几个指令一起配合才能完成。例如count += 1;就由复制变量到寄存器、加一、复制回内存3个指令组成。在任何一个指令执行过后cpu都有可能切换到另一个线程,继而引发并发问题。
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2702