在 Linux 的 POSIX 线程模型中,当父线程修改全局变量后创建子线程,子线程一定会看到修改后的最新值。这是由线程的内存共享机制和线程创建时序保证的,具体原理如下:
关键机制解析
- 内存共享本质:
- 所有线程共享相同的全局数据段
- 修改操作直接作用于物理内存,无副本存在
cint global = 0; // 位于数据段void* child_thread(void* arg) {printf("%d\n", global); // 总是读取最新内存值}int main() {global = 42; // 父线程先修改pthread_create(&tid, NULL, child_thread, NULL); // 后创建// ...}
-
创建时序保证:
pthread_create()
调用时,父线程的代码执行到此处时:- 之前的所有写操作(包括对 global 的修改)已完成
- 编译器和 CPU 保证写操作的可见性(在 x86 架构下有强内存模型保证)