假设单核CPU的情况下。(既高速缓存都是一样的)
一 一个变量a被线程A和线程B共享,A、B线程同时做a++操作。CPU切换时间片实际还是顺序操作,会有问题吗?如何理解?二 一个变量a被线程A和线程B共享,A写,B读,会出现B读不到最新的值吗?
应该如何解释清楚以及如何证明(官方文档等)?
8 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
乱序的意思是线程可以在任意时刻被切换, 所以即使是单核, 也有可能一个线程正在执行某个函数体的时候, CPU开小差跑去执行另一个线程了的函数了, 所以还是需要的.
如果是JavaScript的事件模型, 就不需要了, 因为其事件循环机制会确保执行另一个task(不是线程)的时候, 当前正在执行的函数栈一定是空的, 即在一个函数调用完全结束之后, 才会执行下一个函数. 所以写NodeJS的时候压根不需要考虑并发导致的线程安全问题.
BIG阳
TA贡献1859条经验 获得超6个赞
没有东西保证你读到。原则上,一个没有保证的东西不出错也只是运气好,不要写依赖于运气的程序。
如果要设计一个实验: JVM的double读写不保证是原子的,在32位机器上很可能实际也不是原子的。你可以试试多线程同时读写一个double变量。
跃然一笑
TA贡献1826条经验 获得超6个赞
兄弟,举个例子啊,比如i++,需要三个操作吧(读,+1,写),如果A线程在进行+1之后没来的急写,CPU调用B线程i++,那么下次在调用A线程时直接写,是会覆盖B的更新的,
添加回答
举报
0/150
提交
取消