多进程调用同一dll和多线程调用同一dll有什么区别

superstar162 2010-05-25 10:49:20
如题,
现有一第三方dll,用于读取数据,读取数据函数需要传递相应的地址参数,该地址代表不同的通讯设备
多进程调用:现在有一dll在程序目录下,同时开启多个程序,是不是就相当于多进程调用该dll?不同程序与不同的地址通讯,此时可以正常通讯。
多线程调用:如果采用多线程调用同一dll,每个线程与不同地址的设备地址通讯,当只有一个设备地址时只开启一个通讯线程,此时通讯正常。但是如果有多个设备即开启多个通讯线程与不同地址的设备通讯,就会发生通讯数据的混乱!各个线程均采用局部变量用于通讯!!一开始我以为是dll的读取数据的函数的问题,所以采用每个线程调用不同的dll副本的方法,问题依旧!数据依旧混乱!
小弟新手,求高手赐教!谢啦
...全文
464 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
houyichong 2010-05-28
  • 打赏
  • 举报
回复
是这样的,多个进程去读dll的话就是有内存中存在多个dll副本,每个进程读自己对应的dll副本
但是如果你的进程并发访问一个硬件的话就有问题了,所以你需要使用互斥或信号量来使用该硬件设备

而一个进程中多个线程方访问dll的话你用到临界区就可以了
jacket84 2010-05-26
  • 打赏
  • 举报
回复
多进程调用同一个dll,就相当于说有多个dll副本,每个dll都包含在每一个进程空间中。
而线程就不一样,dll就被包含在本进程中,即使开多个线程,但都调用的是用一个dll中的方法。
iqyely 2010-05-26
  • 打赏
  • 举报
回复
关注下。不太懂。
SS_LO 2010-05-26
  • 打赏
  • 举报
回复
貌似很难
superstar162 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sqldebug_fan 的回复:]
我拷贝了N个dll,每个线程调用不同的dll?

这个你是怎么做到的?是改动态库的名字?
[/Quote]

改的动态库的名字
dd_zhouqian 2010-05-26
  • 打赏
  • 举报
回复
动态掉用内存里只有一份DLL吧
SQLDebug_Fan 2010-05-26
  • 打赏
  • 举报
回复
我拷贝了N个dll,每个线程调用不同的dll?

这个你是怎么做到的?是改动态库的名字?
guanking 2010-05-26
  • 打赏
  • 举报
回复
楼上正解。关键是要调用的DLL是否支持多线程调用,数据处理和读写过程是否有分离。
。对DLL而言,多线程调用与多进程调用区别不大。

LZ提到的第三方dll,用于读取数据,读取数据函数需要传递相应的地址参
同时调用多个DLL,可能会产生冲突。
liangpei2008 2010-05-26
  • 打赏
  • 举报
回复
如果dll在设计时没有考虑过多线程调用,或者说在dll内部没有进行线程同步的话,多线程访问时程序必然要挂掉的。因为多线程调用DLL时,DLL中的对象是创建在堆上的,那么多线程地访问时,内存不加锁就会造成紊乱!
superstar162 2010-05-26
  • 打赏
  • 举报
回复
我拷贝了N个dll,每个线程调用不同的dll
baseyueliang 2010-05-25
  • 打赏
  • 举报
回复
小心使用全局变量

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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