日期:2014-05-16  浏览次数:20594 次

多线程中动态链接库的使用
请问在多线程内是否可以重复加载动态链接库,对一个DLL的变量,如果希望每个使用DLL的线程都有自己的值应该怎么做呢?

------解决方案--------------------
dll是被加载到进程空间的,LoadLibrary返回的值是dll加载到的进程空间地址,所以都是一样的。这和多线程没有关系。 


一个dll在EXE中只会被加载一次,再次调用LoadLibrary仅仅增加模块句柄的引用计数而已,所以无需每个线程都调用LoadLibrary,可以直接使用句柄,或者用GetModuleHandle来获取已加载dll的句柄。

------解决方案--------------------
动态连接库和Win是一样的,
各个线程都有各自的空间,
不会相互影响。
可以放心使用。

其实动态链接库不管怎么调用都不会冲突的。
不管是多线程,多进程,都不会出问题。

只要不是静态链接库。
------解决方案--------------------
线程加载DLL后,该dll中用到的变量就被加载到线程本身的栈空间里面去了
所以多个线程同时使用dll不会冲突