cpu无法处理同时读写吗?
不是,cpu对同时读写无所谓。cpu读写内存是通过数据总线操作的,我们只有一个数据总线。cpu并不关心你的程序是不是在同时读写同一块内存。在cpu的角度,并没有线程的概念。都是基本的数据读写操作。
但是我们自己需要关心,因为可能读写操作不是原子操作,会有数据错乱的问题。
数据错误的原因
由于同时2个线程写同一大块内存,2个线程可能交错执行写入操作。最终导致数据结果,不是我们想要的结果。
crash的原因
由于数据错乱后,程序运行异常,可能有野指针的访问,等错误,最终会crash。
多线程读同一块内存,会导致异常吗?
不会,因为只是读取数据,并不会产生错误的结果,即使交错执行读取,最终结果也是正确的。
所以有时,我们会先初始化一块内存,在程序运行过程中有很多线程去读取这块内存,这种用法并没有错误。不需要加锁。
网友评论