以前对volatile的了解,都是可以防止被编译器优化,从而从内存中都读写数据。
但当ddr中的数据被cache了以后,然后又是被命中了,那么下次你去读写数据时,CPU还是中cache中去操作的。这就引来了和硬件的不一致性,但简单的volatile也不能解决cache的一致性。因为CPU会认为当前的数据就是从内存中去读写的(cache也属于内存级别)。所以只能通过专门的cache一致性的writeback和invalid来完成。
总结,cache场合下volatile不能解决一致性问题。要通过cache自身来完成。传统的volatile不单单是只认可ddr内存,cache也是被认可的,是CPU认可的读写内存。
本文探讨了在使用volatile关键字时遇到的缓存一致性问题。当数据被缓存并且被命中时,即使指定了volatile,CPU仍然可能从缓存而不是主内存中读取数据,导致与硬件状态不一致的情况。为了解决这个问题,需要依靠缓存自身的writeback和invalid机制来确保数据一致性。
3499

被折叠的 条评论
为什么被折叠?



