如果 c++ 程序调用该 dll 并且该 c++ 程序是多线程的,那么使用 dmd 编译器 (D1) 编译的 dll 会出现什么问题?
问问题
80 次
1 回答
3
D 使用stop-the-world 垃圾收集器,这意味着它需要能够在收集期间暂停所有访问 D 托管内存的线程。为此,运行时必须具有这些线程的列表。
在 D 中编写 Win32 DLL的 D2 指南中有关于添加 DLL_THREAD_ATTACH/DLL_THREAD_DETACH 处理程序以通知运行时新线程的说明,但是文章的 D1 版本仅提到“尚不支持多线程”。因此,如果您被迫使用 D1,您可能必须使用全局锁同步所有 DLL 的入口点(导出的函数),或者以其他方式处理同步。
于 2011-04-02T19:29:32.220 回答