多线程 – 在单个应用程序中调用多个线程的dll函数是否安全?

前端之家收集整理的这篇文章主要介绍了多线程 – 在单个应用程序中调用多个线程的dll函数是否安全?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Delphi 2009中编写一个服务器应用程序,实现了几种类型的身份验证.每个身份验证方法都存储在单独的dll中.第一次使用验证方法,加载相应的dll.该DLL仅在应用程序关闭时才被释放.

在服务器线程(连接)之间没有任何形式的同步访问dll是否安全?

解决方法

简答:

是的,通常可以从多个线程调用DLL函数,因为每个线程都有自己的堆栈,并且调用一个DLL函数或多或少与调用其他代码的其他函数一样.

长答案:

如果实际上可能取决于使用共享可变状态的DLL函数.

例如,如果你这样做:

DLL_SetUser(UserName,Password)
if DLL_IsAuthenticated then
begin
...
end;

那么从不同的线程使用是绝对不安全的.在这个例子中,你不能保证在DLL_SetUser和DLL_IsAuthenticated之间没有其他线程对DLL_SetUser进行不同的调用.

但是,如果DLL函数不依赖某种预定义状态,即所有必需的参数都可以一次使用,所有其他配置对于所有线程都是相同的,那么您可以假设它可以工作.

if DLL_IsAuthenticated(UserName,Password) then
begin
...
end;

但要小心:可能DLL函数看起来是原子的,但内部使用的是不是的.例如,如果DLL创建一个总是具有相同名称的临时文件,或者访问一次只能处理一个请求的数据库,它将被视为共享状态. (对不起,我想不出更好的例子)

概要:

如果DLL厂商说,他们的DLL是线程安全的,我会使用它们从多个线程没有锁定.如果他们不是 – 或者即使供应商不知道 – 你应该安全地使用锁定.

至少在遇到性能问题之前.在这种情况下,您可以尝试创建多个应用程序/进程,其中包含您的DLL调用并将其用作代理.

原文链接:https://www.f2er.com/java/123612.html

猜你在找的Java相关文章