一个动态库的导出函数能否被两个线程加载,执行结果有影响吗?
我将类(class A)的一个成员函数fun封装成了动态库的一个导出函数dFun。现在有两个线程同时加载这个动态库的函数dFun。每个线程的执行结果是否互相影响。 问题点数:50、回复次数:7Top
1 楼happyparrot(快乐鹦鹉)回复于 2005-08-04 12:45:43 得分 0
应该不会影响的。Top
2 楼dirdirdir3(风)回复于 2005-08-04 12:52:36 得分 0
按道理来说应该没有影响。Top
3 楼honker110(honker)回复于 2005-08-04 12:54:44 得分 0
不会的,这本来就是动态库的一个特点/优点Top
4 楼orbit(走了走了)回复于 2005-08-04 12:55:12 得分 0
只要没有使用共享数据段应该没有问题,但是设计到系统资源或其他外部资源的申请和释放的时候要注意使用临界区或其他方法保证对资源的安全访问Top
5 楼pipilupzj(皮皮鲁)回复于 2005-08-04 22:27:39 得分 0
两个线程在同一个进程的么?
如果在同一个进程的话,那么dll只会加载一次,在第二次加载的时候只是将dll的引用计数增加一个,两个线程操作的是同一个内存空间,所以执行结果肯定是有影响的
如果在不同进程的话,那么每个进程都会加载此dll,并且内存空间是相互隔离的,执行结果没有任何影响,除非你在dll中定义共享内存节(共享内存节中的数据为多个进程共享)Top
6 楼liuduofu(天上不下雨,地上也不干!)回复于 2005-08-25 10:28:34 得分 0
pipilupzj(皮皮鲁)正解,在同一个进程中,dll无论被调用多少次,只加载一次,在的动态库里你可以定义个全局变量,在调用的时候进行赋值,那个值是被改变的,在第二次调用的时候,值已经变化了
Top
7 楼wwjokwang(Why)回复于 2005-08-31 16:09:37 得分 0
如果在同一个进程的话,如果存在全局数据.执行结果有影响的
如果不存在全局数据.执行结果没有影响的
如果在不同进程的话,那么每个进程都会加载此dll,并且内存空间是相互隔离的,执行结果没有任何影响,除非你在dll中定义共享内存节(共享内存节中的数据为多个进程共享)
Top




