多CPU环境中,同一内存地址的读写同时进行的时候会发现什么情况?
硬件方面有对内存访问的序列化限制吗?
假设A地址的 初始数据是B
2个线程在进行操作,其中1个线程对A地址进行数据更新,更新为B1
另一个线程正在读取A的数据,会得到什么数据?
这2个步骤正好同时进行
[解决办法]
lock 锁前缀
[解决办法]
即便没有Cache,多处理器也是共享内存控制器的,应该不会出现同时读写的事。
[解决办法]
依赖于机器 如果没有硬件保护 可以用一些相关指令,在读数据时锁内存 TSL
[解决办法]
单核CPU是不会发生的
多核按照单核的理解应该发生,但是它为什么没发生呢,同样的软件系统
说明多核的CPU有控制,有更好的解决方案
[解决办法]
硬件上有防护这种情况的机制措施,严格时间上的同时读写同一地址内存是不会出现的。
[解决办法]
应该不可能吧。在其中一个cpu写数据的过程中。内存传输数据的总线应该处在写数据的状态。而内存的数据总线应该只有一个吧。
[解决办法]
很多解决方法,基于软硬件的都有。如果是catch的,有基于总线的MESI方法,基于目录的管理方法。如果是普通内存,有load before write方法来保证原子写。内容很多,建议看书