2008-10-22 3 views
5

Ich arbeite an einem Projekt, wo wir .NET-Code und nativen C++ - Code über eine C++/CLI-Schicht mischen. Bei dieser Lösung möchte ich Thread Local Speicher über das __declspec (Thread) Deklaration verwenden:Thread lokalen Speicher mit __declspec (Thread) schlägt in C++/CLI

__declspec(thread) int lastId = 0; 

jedoch beim ersten Zugriff der Variablen, ich eine Nullreferenceexception bekommen. Um genauer zu sein, ist die Deklaration innerhalb einer Ref-Klasse (eine .NET-Klasse in C++/CLI implementiert) getan.

Ich habe bereits etwas über __declspec (thread) gelesen, funktioniert nicht mit verzögerten DLLs geladen. Verwende ich verzögerungsgeladene DLLs automatisch, wenn ich .NET verwende?

Antwort

6

Es scheint, dass __declspec (Thread) isn't supported by CLR.

Beachten Sie, dass .net-Threads nicht notwendigerweise native Threads sind, but can be also fibers, sodass Standard-APIs für Threads nicht auf ihnen funktionieren.

Wenn Sie eine verwaltete Klasse haben, sollten Sie verwaltete Threading-APIs für thread local storage verwenden.

Es gibt eine Menge Artikel über diesen Unterschied. Dies ist nur um Sie zu beginnen.

Als Tipp: Sie könnten das ThreadStatic Attribut anstelle des TLS verwenden, um performance zu verbessern. Wenn Sie mit ASP.NET-Anwendungen arbeiten, müssen Sie sich an some things über TLS erinnern.