6

私は、C++/CLI レイヤーを介して .NET コードとネイティブ C++ コードを混在させるプロジェクトに取り組んでいます。このソリューションでは、__declspec(thread) 宣言を介して Thread Local Storage を使用したいと考えています。

__declspec(thread) int lastId = 0;

ただし、変数の最初のアクセスで、NullReferenceException が発生します。より正確には、宣言はref クラス(C++/CLI で実装された .NET クラス) 内で行われます。

__declspec(thread) が遅延ロードされた DLL では機能しないことについては、既に読んだことがあります。.NET を使用している場合、遅延ロードされた DLL を自動的に使用していますか?

4

2 に答える 2

6

__declspec(thread)は CLR でサポートされていないようです。

.net スレッドは必ずしもネイティブ スレッドではありませんが、ファイバーにもなり得るため、スレッド用の標準 API は動作しません。

マネージド クラスがある場合は、スレッド ローカル ストレージにマネージド スレッド API を使用する必要があります。

この違いに関する記事はたくさんあります。これは、開始するためのものです。

ヒント:パフォーマンスを向上させるために、TLS の代わりに ThreadStatic 属性を使用できます。ASP.NET アプリケーションを使用している場合は、TLS についていくつか覚えておく必要があります。

于 2008-10-22T08:05:53.317 に答える
4

残念ながらサポートされていません。回避策を含むブログエントリを次に示します。

http://blogs.msdn.com/jeremykuhne/archive/2006/04/19/578670.aspx

于 2008-10-22T08:09:43.247 に答える