使用 D1 和 dll 会出现什么问题?

发布于 2024-10-28 14:32:56 字数 75 浏览 5 评论 0原文

如果 c++ 程序调用 dll 并且该 c++ 程序是多线程的,那么使用使用 dmd 编译器 (D1) 编译的 dll 会出现什么问题?

What problems can I expect using a dll compiled using dmd compiler (D1) if c++ program calls that dll and that c++ program is multithreaded?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烂柯人 2024-11-04 14:32:56

D 使用 stop-the-world垃圾收集器,这意味着它需要能够在收集期间暂停所有访问 D 管理内存的线程。为此,运行时必须具有这些线程的列表。

在 D 中编写 Win32 DLL 的 D2 指南包含有关添加 DLL_THREAD_ATTACH/DLL_THREAD_DETACH 处理程序的说明通知新线程的运行时,但是文章的 D1 版本仅提到“尚不支持多线程”。因此,如果您被迫使用 D1,您可能必须使用全局锁来同步所有 DLL 的入口点(导出的函数),或者以其他方式处理同步。

D uses a stop-the-world garbage collector, which means that it needs to be able to pause all threads that access D-managed memory during a collection. In order to do that, the runtime must have a list of these threads.

The D2 guideline for Writing Win32 DLLs in D has instructions on adding DLL_THREAD_ATTACH/DLL_THREAD_DETACH handlers to notify the runtime of new threads, however the D1 version of the article only mentions that "Multiple threads not supported yet". Thus, if you're forced to use D1, you will probably have to synchronize all of your DLL's entry points (exported functions) using a global lock, or somehow else take care of the synchronization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文