2008-10-22 5 views
5

Estoy trabajando en un proyecto en el que mezclamos código .NET y código C++ nativo a través de una capa C++/CLI. En esta solución, quiero usar almacenamiento local de subprocesos a través de la declaración __declspec (rosca):Enlazar el almacenamiento local con __declspec (hilo) falla en C++/CLI

__declspec(thread) int lastId = 0; 

Sin embargo, en el primer acceso de la variable, aparece un NullReferenceException. Para ser más precisos, la declaración se realiza dentro de una clase ref (una clase .NET implementada en C++/CLI).

Ya he leído algo sobre __declspec (thread) no funciona con archivos DLL cargados con retraso. ¿Estoy usando DLL cargados con retraso si uso .NET?

Respuesta

6

Parece que __declspec (hilo) isn't supported by CLR.

Tenga en cuenta que los hilos .net no son necesariamente hilos nativos, but can be also fibers, por lo que las API estándar para hilos no funcionan en ellos.

Si tiene una clase administrada, entonces debe utilizar la API de threading administrado para thread local storage.

Hay muchos artículos sobre esta diferencia. Esto es solo para comenzar.

Como consejo: Puede utilizar el atributo ThreadStatic en lugar del TLS para mejorar performance. En caso de que esté trabajando con aplicaciones ASP.NET, debe recordar some things sobre TLS.

Cuestiones relacionadas