首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

多个进程调用同一个静态库的有关问题

2013-10-18 
多个进程调用同一个静态库的问题是这样的,这个需求可能有点奇怪,比如说有俩个进程A和B,他们使用了同一个静

多个进程调用同一个静态库的问题
是这样的,这个需求可能有点奇怪,
比如说有俩个进程A和B,他们使用了同一个静态库,
比如说Test.lib,在Test.lib里有一个变量,定义为int inumber = 0(这里的类型定义为static或全局都是没用的);
需求是这样的,比如说A进程加载了Test.lib,将inumber的值修改为5;
哪么当B进程加载Test.lib时,获取到inumber的值是A进程修改之后的值,但现在是达不到这个需求的,目前只考虑到了内存共享的法子,不知道还有没有其它的解决方法。
路过的有没有什么好的想法,写文件之类的就算了,这涉及到效率问题。 类 库 内存
[解决办法]
静态库*.lib是编译到程序代码中的,两个程序使用同一个静态库文件进行编译后,在各自生产的可执行文件时独立的两端代码与数据,自然,使用两个可执行文件启动的进程也是相互独立的,不会相互影响。

真正需要在进程间注意公用数据的通常来讲是所谓的IPC,比如“共享内存”什么的。
[解决办法]
除了进程间通信,貌似没有好方法。
剪贴板,管道,共享内存都可以啊
[解决办法]
信号量应该是可以做到的, B阻塞等待信号量sem, A修改完变量之后通知sem, 这时B阻塞结束.

典型的线程同步.
[解决办法]
通信吧!不通信两个独立的东西应该是不能修改的!
静态库是在生成可执行文件的时候已经加载进去了的!
[解决办法]
楼主搞错了静态库和静态链接库的概念,自己有空找找找资料学习下吧,就不说这个了。
说下你的需求。
你的需求用动态库可以实现。
只要在动态库中这样做就可以了。

#pragma data_seg("DLLSharedSection")      // 声明一个共享数据段,参数为共享数据段段名
 int SharedData1 = 123;       // 初始化共享数据值
 .............
 .............
 int SharedDataN = 123;
#pragma data_seg()

#pragma comment(linker,"/section:.DLLSharedSection,rws") //设置此段段属性

之后导出这些数据,或者写个接口操作这些数据就行了。
所有加载你的DLL的进程将共享这个DLLSharedSection段的数据。

热点排行