多进程或多线程访问共享模块中的全局变量

多进程或多线程访问共享模块中的全局变量

Content #

Q: 如果一个共享对象lib.so中定义了一个全局变量G,而进程A和进程B都使用了 lib.so,那么当进程A改变这个全局变量G的值时,进程B中的G会受到影响吗?

A: 不会。因为当lib.so被两个进程加载时,它的数据段部分在每个进程中都有独立的副本,从这个角度看,共享对象中的全局变量实际上和定义在程序内部的全局变量没什么区别。任何一个进程访问的只是自己的那个副本,而不会影响其他进程。那么,如果我们把这个问题的条件改成同一个进程中的线程A和线程B,它们是否看得到对方对lib.so中的全局变量G的修改呢?对于同一个进程的两个线程来说,它们访问的是同一个进程地址空间,也就是同一个lib.so的副本,所以它们对G的修改,对方都是看得到的。

From #

程序员的自我修养