使用 D1 和 dll 会出现什么问题?
如果 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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.