c++ multithreading thread-safety c++-cli mutex

c++ - Cómo implementar una colección segura de subprocesos no administrada cuando recibo este error:<mutex> no se admite al compilar con/clr



multithreading thread-safety (1)

Tengo una aplicación de C ++ que consiste en C ++ no administrado, C ++ administrado y c #. En la parte no administrada, estoy tratando de crear una colección segura para subprocesos usando std :: mutex.

Sin embargo, cuando uso el mutex obtengo el siguiente error;

error C1189: #error: <mutex> no se admite al compilar con / clr o / clr: pure.

¿Alguna idea de por qué no puedo usar el mutex? ¿Alguien puede recomendar un reemplazo para que pueda crear una colección no administrada segura para subprocesos?


No se admite porque la implementación std :: mutex utiliza GetCurrentThreadId (). Esa es una función winapi que no debe usarse en código administrado, ya que puede estar ejecutándose en un host CLR personalizado que no usa subprocesos para implementar subprocesos.

Este es el buen tipo de problema que tiene, muestra que estás construyendo tu código incorrectamente. Su C ++ nativo se está compilando con / clr en efecto. Lo que funciona bastante bien, todo el código compatible con C ++ 03 se puede compilar en MSIL y compilar justo a tiempo en tiempo de ejecución, al igual que el código administrado. No quieres que esto suceda, tu código C ++ nativo debe compilarse a código de máquina y obtener el amor del optimizador de código en tiempo de compilación.

Desactive la opción / clr para este archivo de código fuente, y posiblemente otros, en su proyecto. Haga clic derecho + Propiedades, General. Si aparece la exclusión mutua en el archivo .h que debe #incluir en un archivo fuente C ++ / CLI, entonces tiene un problema mayor, use una interfaz o pimpl para ocultar los detalles de la implementación.