我曾研究过多线程(在 Qt 中),但我缺乏深入的知识。我认为运行时永远不会重复执行代码。一个函数将精确地保留在一个内存位置,所有调用者或对象都将使用它来调用它。在多线程中,我读到每个线程都有自己的堆栈、指令指针等。假设我们有一个全局函数,它可以转换成这样的汇编算法:
//GlobalFunction()
instruction 1 : move value 4 into accumulator
instruction 2 : add 5 to content of accumulator
instruction 3 : subtract 1 from content of accumulator
//some more stuff and function returns
//thread 1
call GlobalFunction()
//thread 2
call GlobalFunction()
现在也许线程1的指令指针指向指令3,而线程2获取切片并执行指令1。在这个线程1执行指令3之后。累加器数据不会被破坏吗?如果是这样,那么为什么只使用非静态局部变量的函数不需要在多线程环境中锁定?
PS:另外我认为单个指令是原子的而不是一组指令,因此在执行另一个线程的指令之前,实现可能没有机会将寄存器数据刷新到某个存储位置。