n = n + 1 的机器码是这样表示的
LD X, r φ // 把 x 载入到寄存器中 load x register
ADD 1, r φ // 寄存器中的值加1
ST r φ,x // 储存X的值 store
当大量的线程同时执行这段代码,x总是从0 开始,每次都会把0 读入寄存器,因此可能是线程不安全的,也可能在一些机器上,这些指令是原子的,就不存在线程安全问题
本文探讨了n=n+1操作在机器码层面的表示,包括加载、加1和存储指令。讨论了在多线程环境下,由于各线程可能同时读取初始值导致的线程安全问题,以及某些机器上原子操作的潜在解决方案。
n = n + 1 的机器码是这样表示的
LD X, r φ // 把 x 载入到寄存器中 load x register
ADD 1, r φ // 寄存器中的值加1
ST r φ,x // 储存X的值 store
当大量的线程同时执行这段代码,x总是从0 开始,每次都会把0 读入寄存器,因此可能是线程不安全的,也可能在一些机器上,这些指令是原子的,就不存在线程安全问题
506
162

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