gpt4 book ai didi

multithreading - Delphi DLL - 线程安全

转载 作者:行者123 更新时间:2023-12-03 14:55:46 33 4
gpt4 key购买 nike

我有一个 Delphi DLL,我想将它加载到我的应用程序中的一个线程(准确地说是多个线程)中。 DLL 只是创建一个对象,然后使用它并销毁它。从这个角度来看,DLL 代码是线程安全的。

但是如果我在线程中加载该 DLL 会发生什么? DLL 仍然是线程安全的吗?关于加载 DLL 的线程,我应该了解哪些信息?我已经看到 VCL 有 IsMultThread 属性,该属性是在我们创建线程时设置的,但是 dll 会收到有关此情况的通知还是我应该手动执行此操作?

最佳答案

最常见的陷阱是使用全局变量。只要您不使用任何全局变量(或正确同步对您使用的变量的访问),您就离线程安全还有很长的路要走。

例如,内存管理器使用

IsMultiThread 在单线程情况下进行优化。就我个人而言,我认为现在这不是一个值得的优化,因为几乎所有有用的代码都有一些描述的线程。我只需在 DLL 的开头将 IsMultiThread 设置为 True,例如在 DLL .dpr 文件的 begin/end block 中,或者在单元的初始化部分之一中,这相当于同一件事。

为了直接回答您的问题,除非您在该 DLL 中创建线程,否则 DLL 中的 IsMultiThread 实例不会设置为 true。由于您在 EXE 中创建线程,因此您需要自己在 DLL 中执行此操作。

更一般地说,如果不知道代码的线程安全性以及线程安全的实际含义,就不可能对代码的线程安全性进行太多讨论。后一点可能听起来很奇怪,但我指的是 Eric Lippert 著名的 What is this thing you call "thread safe"? 中讨论的问题。文章。

关于multithreading - Delphi DLL - 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677239/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com