深入理解计算机系统——第12章:多线程中共享变量
多线程程序中的共享变量:
一个线程是共享的当且仅当多个线程引用这个变量的某个实例。
12.4.1 线程存储器模型
(1)寄存器是不共享的,而虚拟存储器总是共享的
(2)线程的栈保存在虚拟地址空间的栈区域,并且通常被相应的线程独立的访问。
(3)但线程栈是不对其他线程设防的。如果一个线程以某种方式得到其他线程栈的指针,那么他就可以读写这个栈
的任何部分了。
12.4.2 将变量映射到存储器。
全局变量:
(1)全局变量是定义在函数之外的变量。
(2)在运行时,虚拟存储器的读写区域只包含全局变量的一个实例,任何线程都可以引用。
本地自动变量:
(1)就是局部变量,定义在函数内部但是没有加static的变量。
(2)每个线程都包含了它自己所有的本地自动变量的一个实例,即使所有线程共有一个例程是也是如此。
本地静态变量:
(1)定义在函数内部加static的局部变量
(2)和全局变量效果一样,只有一个实例。
12.4.3 共享变量
(1)当且仅当它的一个实例被一个以上线程引用。
(2)本地自动变量也能被共享的。