两个应用程序同时调用同一个DLL的同一个函数,如何不冲突?

mm7654321 2003-03-21 07:46:40
我有两个应用程序,需要同时启动,但是这两个应用都要调用同一个DLL的同一个函数,内存中数据有冲突,请教有什么方法避免?谢谢!
(两个应用中Loadlibrary返回的地址相同,GetProAddress返回的地址也相同)
...全文
1333 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mm7654321 2003-03-25
  • 打赏
  • 举报
回复
问题已解决,是我没弄清楚两个应用在同一个进程中,是两个线程。只要控制共享资源的访问就可以了。
谢谢各位!
fbmsf 2003-03-23
  • 打赏
  • 举报
回复
不同的程序加载相同的dll时,会把dll载入自己的地址空间,地址相同,可是他们在不同的进程中。每个进程都有自己独立的4GB的空间。
moonboy1980 2003-03-23
  • 打赏
  • 举报
回复
一般来说,系统会为你COPY两份进行运行,因为地址映射(内存)系统可能会把调用的DLL的函数映射到同一个地址上来节省资源,这是物理地址,地址当然是一样的。你所看到的是逻辑地址,如果一样可能是系统把它认为是系统资源,分配了相同的逻辑地址,这就会存在多进程共享资源而出现互斥问题,系统会解决好他们的互斥。你所说的同时是并发(同一时间间隔内有多个进程执行),单个CPU在同一时刻只能执行一个进程,进程会用逻辑地址调用把数据纳入自己的范围内,不会影响到其他进程,如果两个进程有关系,系统也会解决好他们的同步问题,你不必担心的。
ggeneral2 2003-03-23
  • 打赏
  • 举报
回复
同意楼上
up
mm7654321 2003-03-21
  • 打赏
  • 举报
回复
dll中的函数是用C写的,会不会是因为dll不是编译成多线程版本的?
papaya_stone 2003-03-21
  • 打赏
  • 举报
回复
应该不会有问题的,不同的程序加载相同的dll时,会把dll载入自己的地址空间,地址相同,可是他们在不同的进程中。
不知你的dll中的函数是做什么用的,做了哪些操作。
afc 2003-03-21
  • 打赏
  • 举报
回复
不同进程之间共享DLL的只读数据段,可写的数据段每个进程有单独一份,不会相互冲突啊。
mm7654321 2003-03-21
  • 打赏
  • 举报
回复
Re ArthurTu:
取得的函数内存地址(两个应用均未结束)与process的地址有关系吗?

Re ghgk:
试过了,就是出了问题,才来请教各位的。虽然有先后,但是一个还没结束,另一个已经启动了,数据就出问题了。
ghgk 2003-03-21
  • 打赏
  • 举报
回复
楼主确实试过了?我想应该不会有问题的,比楼主这样更极端的都有。虽然你认为是同时启动,但在系统看来还是有先后区别的。
ArthurTu 2003-03-21
  • 打赏
  • 举报
回复
有什么关系?你看到的地址是在你这个process的地址,和另外一个process有什么关系?
mm7654321 2003-03-21
  • 打赏
  • 举报
回复
有关系阿,因为函数地址相同,两个应用传给函数的变量以及函数内部的变量存储地址都一样,两个应用又同时启动,数据当然会有冲突。会不会跟多线程有关系?(多线程我不大懂的。)
注:
OS:Win2000 pro
stkman 2003-03-21
  • 打赏
  • 举报
回复
应该没关系阿。如果要想有关系,反倒要做手脚。
Free_Man 2003-03-21
  • 打赏
  • 举报
回复
好象没有关系吧

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧