【问题标题】:Threads Share local variable?线程共享局部变量?
【发布时间】:2021-08-14 15:08:42
【问题描述】:

我了解到线程共享相同的内存但不共享寄存器。

另一方面,我也读到线程不共享局部变量,这怎么可能?

这不是矛盾吗?

【问题讨论】:

    标签: c multithreading memory pthreads


    【解决方案1】:

    我还读到线程不共享局部变量,这怎么可能?

    同一个进程的线程共享相同的地址空间,并且它们遵循相同的块和函数的作用域规则,所以如果你声明一个全局变量或者你将一个变量作为指针参数传递给线程,这个变量是共享的线程,您需要各种预防措施才能对其进行修改(同步)。

    我了解到线程共享相同的内存但不共享寄存器。

    线程不共享寄存器,因为每个线程在不同的内核上运行(这是一种简化,因为在现代架构中一个内核可以有多个线程)并且每个内核都有自己的寄存器,因此您需要同步方法来处理这个问题问题。

    【讨论】:

    • 如果我只有 1 个核心,他们会共享寄存器吗?加上如果他们共享内存,为什么他们不共享局部变量,这是一个矛盾。局部变量是内存的一部分...
    • 我说他们共享局部变量,基于嵌套块的正常范围规则,所以只有当它是一个全局变量或作为参数传递时。如果你只有一个核心,当操作系统切换计算线程时,前一个线程的所有寄存器都会被保存,当前寄存器会根据上下文发生变化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多