多个线程调用一个dll的同一个接口

Tiger-3D 2013-10-08 11:28:38
程序加载了一个dll,之后该程序的多个线程调用一个dll的同一个接口。
一个线程调用dll的这个接口之后,这个接口还没有返回,另一个个线程又调用了这个接口,那么dll中,是处理怎么第二个调用的?是让第二个调用等待,还是和第一个接口并行调用?
...全文
1054 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
红色代码 2013-10-26
  • 打赏
  • 举报
回复
如果DLL或者线程中没有同步机制的话,当然会并行执行
nbabn 2013-10-09
  • 打赏
  • 举报
回复
跟你的普通代码一样的调用机制,没有任务特殊之处,DLL加载到你的进程空间了,你多线程执行DLL的代码,和你多线程执行自己写的代码一样,没什么特别的,多线程调用该注意的地方也都一样。
翅膀又硬了 2013-10-08
  • 打赏
  • 举报
回复
不一定什么样。跟接口的实现有关系。可以把动态库的接口看成普通函数。如果接口允许多个线程并行用,就是“和第一个接口并行调用”。如果不允许(加锁了)就是“让第二个调用等待”,即便加锁,等待也是在接口内部等待(进入锁之前的等)
昨夜无风 2013-10-08
  • 打赏
  • 举报
回复
全部都是局部变量可以并行,但是如果有全局变量就需要加锁
许文君 2013-10-08
  • 打赏
  • 举报
回复
异步调用如果涉及全局资源则需要加锁,如果是形如

 int add(int a,int b)
 {return a+b;}
这种就不需要,若这dll非你所开发,那该咨询相应开发人员。
davidyu720 2013-10-08
  • 打赏
  • 举报
回复
没听说过:多个线程调用一个dll的同一个接口时,Windows会有同步处理。 多个线程可以任意调用一段代码(自己程序的代码也好,DLL的接口方法也好)。 如果任意调用会导致逻辑错误(比如一个线程调用未返回,另一个线程又去调用),就必须给方法加上同步保护。
oyljerry 2013-10-08
  • 打赏
  • 举报
回复
Dll多线程调用,Windows会有同步处理,所以要防止造成死锁
homesos 2013-10-08
  • 打赏
  • 举报
回复
如果在DLL的接口中没有数据冲突(如对同一内存的使用和销毁),各个线程同时使用没有问题,如果有冲突(如资源对象,像串口SOCKET等),就需要加锁,同一时间只能有一个线程在使用接口逻辑。

15,471

社区成员

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

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