如果函数不使用全局数据,为什么它们在机器代码级别上是线程安全的?

Why are functions thread safe on a machine code level if they don't use global data?

这几天我一直在思考这个问题:当我将一个函数编译成机器代码时,它只是整个代码库的一个独特部分。当我调用一个函数时,参数被复制,进程的指令指针将跳转到函数的开头。对吗?

如果是这样,我不明白如果函数不使用全局数据如何保证线程安全。假设两个线程同时使用不同的数据调用相同的函数。所以它们都在 RAM 中使用相同的指令数据。如何确保他们不会混淆自己?这是上下文切换的目的吗?

我想我对函数在机器代码级别上的工作方式有一些误解。感谢您的帮助。

不是完整答案,但是...

如果您想了解所有关于它的计算机科学知识,存储活动函数调用的参数和局部变量的位置的名称是 activation record。我们在大多数现代编程语言中经常谈论的"stack",实际上是一堆个激活记录。

我已经足够大了,可以使用静态分配函数激活记录的语言,这意味着递归在这些语言中是不可能的,如果有人想到线程,线程也不可能。我还听说过一种编程语言,Self,其中激活记录是第一个 class 个对象,它们是从堆中分配的。