深入理解计算机系统——第12章:多线程中共享变量

多线程程序中的共享变量:

一个线程是共享的当且仅当多个线程引用这个变量的某个实例。

12.4.1 线程存储器模型

(1)寄存器是不共享的,而虚拟存储器总是共享的

(2)线程的栈保存在虚拟地址空间的栈区域,并且通常被相应的线程独立的访问。

(3)但线程栈是不对其他线程设防的。如果一个线程以某种方式得到其他线程栈的指针,那么他就可以读写这个栈

       的任何部分了。

 

12.4.2 将变量映射到存储器。

全局变量:

(1)全局变量是定义在函数之外的变量。

(2)在运行时,虚拟存储器的读写区域只包含全局变量的一个实例,任何线程都可以引用。

本地自动变量:

(1)就是局部变量,定义在函数内部但是没有加static的变量。

(2)每个线程都包含了它自己所有的本地自动变量的一个实例,即使所有线程共有一个例程是也是如此。

本地静态变量:

(1)定义在函数内部加static的局部变量

(2)和全局变量效果一样,只有一个实例。

 

12.4.3 共享变量

(1)当且仅当它的一个实例被一个以上线程引用。

(2)本地自动变量也能被共享的。

posted @ 2015-09-09 15:42  弱水三千12138  阅读(361)  评论(0编辑  收藏  举报