2

c++ プログラムがその dll を呼び出し、その c++ プログラムがマルチスレッド化されている場合、dmd コンパイラ (D1) を使用してコンパイルされた dll を使用すると、どのような問題が予想されますか?

4

1 に答える 1

3

Dは、stop-the-worldガベージコレクターを使用します。これは、コレクション中にDが管理するメモリにアクセスするすべてのスレッドを一時停止できる必要があることを意味します。そのためには、ランタイムにこれらのスレッドのリストが必要です。

DでWin32DLLを作成するためのD2ガイドラインには、DLL_THREAD_ATTACH / DLL_THREAD_DETACHハンドラーを追加して、新しいスレッドのランタイムを通知する手順がありますが、記事のD1バージョンでは、「複数のスレッドはまだサポートされていません」とのみ記載されています。したがって、D1を使用せざるを得ない場合は、グローバルロックを使用してDLLのすべてのエントリポイント(エクスポートされた関数)を同期するか、何らかの方法で同期を処理する必要があります。

于 2011-04-02T19:29:32.220 に答える