Linux共享库(动态库)与进程之间全局变量是无法共享的
2017-08-15 13:46
639 查看
【每个进程调用的动态库中的全局变量都是一个拷贝,各自进程需要自己去初始化各自的全局,而且操作全局也互补影响】
【比如banker.c,在sghall里面有个初始化,在游戏进程里也有初始化,需要两者共享变量得用共享内存或者其他进程间通讯】
Linux共享库(动态库)与进程之间共享全局变量可行性分析
概念就不多说了,下面主要讨论一下在进程中使用共享库(动态库)声明的全局变量的问题:
网上有一篇介绍在主程序中使用动态链接库里的全局变量的文章,可能会给人一些误导。首先,在主程序中可以使用动态链接库中的全局变量是正确的,不可否认的,但这需要在程序编译链接时就要把动态库加上,并在需要使用的程序中使用extern声明变量,这其实没有达到动态库的本质目的(使用时再调用);这其实不算是一个大问题,如果只在一个进程中使用也不会有问题,这里主要讨论在多进程中使用动态库全局变量的问题。
如果想在进程间依靠动态库来共享全局变量恐怕是不太可能的事情,因为不同进程访问动态库时,是写时拷贝,即如果另外一个进程试图去修改动态库中的全局变量时,系统就会把这个全局变量拷贝一份单独给这个进程,而这个修改操作并不会影响到其他进程中变量的值。
测试程序:(下载地址http://download.csdn.net/detail/heli200482128/9553237)
测试结果:
主进程首先修改了这个值,然后在子进程中读取到的是主进程修改后的值,但是子进程中的修改并没有影响到主进程中的使用的动态库中的全局变量。所以试图使用动态库在进程间共享全局变量的方法是行不通的。
附:编译方法
gcc -fPIC-shared testshare.c -o libtestshare.so.2.0
gcc -o main -L/main main.c libtestshare.so.2.0
./main
【比如banker.c,在sghall里面有个初始化,在游戏进程里也有初始化,需要两者共享变量得用共享内存或者其他进程间通讯】
Linux共享库(动态库)与进程之间共享全局变量可行性分析
概念就不多说了,下面主要讨论一下在进程中使用共享库(动态库)声明的全局变量的问题:
网上有一篇介绍在主程序中使用动态链接库里的全局变量的文章,可能会给人一些误导。首先,在主程序中可以使用动态链接库中的全局变量是正确的,不可否认的,但这需要在程序编译链接时就要把动态库加上,并在需要使用的程序中使用extern声明变量,这其实没有达到动态库的本质目的(使用时再调用);这其实不算是一个大问题,如果只在一个进程中使用也不会有问题,这里主要讨论在多进程中使用动态库全局变量的问题。
如果想在进程间依靠动态库来共享全局变量恐怕是不太可能的事情,因为不同进程访问动态库时,是写时拷贝,即如果另外一个进程试图去修改动态库中的全局变量时,系统就会把这个全局变量拷贝一份单独给这个进程,而这个修改操作并不会影响到其他进程中变量的值。
测试程序:(下载地址http://download.csdn.net/detail/heli200482128/9553237)
测试结果:
主进程首先修改了这个值,然后在子进程中读取到的是主进程修改后的值,但是子进程中的修改并没有影响到主进程中的使用的动态库中的全局变量。所以试图使用动态库在进程间共享全局变量的方法是行不通的。
附:编译方法
gcc -fPIC-shared testshare.c -o libtestshare.so.2.0
gcc -o main -L/main main.c libtestshare.so.2.0
./main
相关文章推荐
- Linux共享库(动态库)与进程之间全局变量是无法共享的
- Linux共享库(动态库)与进程之间全局变量是无法共享的
- Linux共享库(动态库)与进程之间共享全局变量可行性分析
- Linux共享库(动态库)与进程之间共享全局变量可行性分析
- Python 进程之间共享数据(全局变量)
- Python 进程之间共享数据(全局变量)
- 动态库与主程序共享全局变量 -- (转)
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- dll和exe的共享节------多进程共享dll/exe全局变量
- 关于进程和线程对于全局变量共享的问题学习总结
- action里不同方法之间不能共享全局变量的原因分析
- 动态库与主程序共享全局变量
- 关于进程和线程对于全局变量共享的问题学习总结
- dll和exe的共享节------多进程共享dll/exe全局变量
- 探究Python多进程编程下线程之间变量的共享问题
- Solution(VS)下多工程之间共享全局变量失效问题
- 进程间同步(互斥) 以及 同一DLL的不同进程copy共享全局变量
- [InstallShield]如何在不同的Script文件之间共享全局变量
- python在不同文件之间共享全局变量方案的探讨
- Python 多进程默认不能共享全局变量