首页 > 解决方案 > 线程共享局部变量?

问题描述

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

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

这不是矛盾吗?

标签: cmultithreadingmemorypthreads

解决方案


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

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

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

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


推荐阅读