为什么多线程代码可能会出现问题
现代计算机都为了追求更快的运行,对其做了很多的优化,但是CPU,内存,IO三者还是有很大的差距,为了提高CPU的效率,增加CPU的缓存,操作系统采用了分时复用,编译器增加了指令优化。这些方式虽然增加了CPU执行的效率,但是对于多线程而言,也增加了可见性,原子性,有序性等问题.
1.可见性
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201106174400158.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0cm9uZ195dQ==,size_16,color_FFFFFF,t_70#pic_center)
对于多核的计算机,每个CPU都有自己的缓存,数据都是先读取到CPU本地缓存,更新完后再把数据写入到CPU本地缓存,而把缓存中的数据刷新到内存中的时间是不确定的,这样就会导致每个线程读取的数据是不一样的,这就是可见性问题。
2.原子性
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201106174450527.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0cm9uZ195dQ==,size_16,color_FFFFFF,t_70#pic_center)
操作系统为了保证cpu执行的效率&#x