dll文件在同一个程序的多线程情况下,是共享的吗?

如题所述

第1个回答  2022-12-11

共享一份DLL。

原因涉及DLL加载和运行机制,主要有两点:

1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用。加载DLL的进程称为宿主进程。被加载的DLL属于宿主进程,不属于宿主进程内某个线程。

2)宿主进程可以重复调用,甚至重复加载DLL。第1次调用DLL或第1次加载DLL时,宿主进程将DLL引入进程空间。一旦宿主进程成功加载DLL,随后的重复调用或重复加载只会增加“引用计数”,而不会加载多份DLL,所以进程中只有一份DLL。

dll文件在同一个程序的多线程情况下,是共享的吗?
共享一份DLL。原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用。加载DLL的进程称为宿主进程。被加载的DLL属于宿主进程,不属于宿主进程内某个线程。2)宿主进程可以重复调用,甚至重复加载DLL。第1次调用DLL或第1次加载DLL时,宿主...

.dll是什么文件
动态链接库Dynamic Link Libraries是一种包含可以由多个程序同时使用的代码和数据的库。通过使用DLL,程序可以实现模块化,由相对独立的组件组成。这意味着一个DLL可以被多个应用程序共享,节省内存并提高系统性能。DLL文件通常以.dll作为扩展名。在程序开发中,动态链接库为开发者提供了一种组织和重用代码的...

扩展名为“DLL”是什么文件?用什么程序打开?
DLL 可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个 DLL 在内存中只有一个实例;DLL 实现了代码封装性;DLL 的编制与具体的编程语言及编译器无关。在Win32 环境中,每个进程都复制了自己的读\/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。

请教多线程并行调用dll的问题
不能说dll中的函数都不能被并行调用。但是如果dll本身使用了全局变量,并且没有做同步,肯定是不行的,你的dll就是这个情况。那么你需要自己同步,也就是保证始终只有一个线程在调用:object lockobj = new object();Parallel.For(0, _dtpost.Rows.Count, (i) => { string ip = _dtpost.Rows...

电脑系统里面的dll文件是指什么?
函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与...

[c++]如何编写线程安全的DLL(转帖)
DLL有个共同的特点就是都有一个初始化函数,一个资源释放函数,其他几个函数都是核心功能函数。而且这些DLL有时会被多个进程同时调用,这就牵扯到多进程的多线程调用DLL的问题。有点绕口,以下我根据我实践中遇到的问题,分四种情况分享一下我解决此类问题的经验:1、动态库只有一个导出函数。这种情况...

求助DLL文件问题
去找一个你那个系统的安装光盘,然后在那里面寻找你缺失的文件,拷贝到system32里面,应该就可以了。如果不行,就卸载你安装的那个应用软件,再试一下。补充:去别的电脑里面去搜索。不过,以经验来看,这个东西不影响系统的正常运转,只是你安装的那个软件的问题。

VC++里面exe,dll多线程通讯
一般也都是这么做的)。在函数里面你 dllevent=Buffer 这就有问题了,因为Buffer是从&m_hEvent来的而不是从m_hEvent来的 说到底是m_hEvent的地址而不是m_hEvent本身 另:为什么SetEvent里面是 slk_event,问题中没有提到这个变量也没见到这个变量。你是想要SetEvent(dllevent)吗 ...

dll不支持多线程
配置错误。dll显示不支持多线程的原因是显示错误。dll是DynamicLinkLibrary的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件。

如何解决程序\/C++Dll的兼容性问题
查看DLL的引用,将DLL的引用信息输出TXT文件查看 这里显示一共引用了5个DLL,功能分别是:系统支持的:wlanapi.DLL:管理WLAN的系统DLL RASAPI32.DLL:管理拨号的系统DLL KERNEL32.DLL:系统内核DLL Visual Studio 2015 C++支持的:VCRUNTIME140.DLL:Visual Studio 2015 生成的 C++ 应用程序所需的运行时组件...

相似回答
大家正在搜