Ответ 1
Он не поддерживается, потому что реализация std:: mutex использует GetCurrentThreadId(). Это функция winapi, которая не должна использоваться в управляемом коде, поскольку она может работать на пользовательском хосте CLR, который не использует потоки для реализации потоковой передачи.
Это хорошая проблема, которая показывает, что вы неправильно строите свой код. Ваш собственный С++ скомпилирован с /clr. Что работает слишком хорошо, весь совместимый с С++ 03 код можно скомпилировать в MSIL и получить вовремя компиляцию во время выполнения, точно так же, как управляемый код. Вы не хотите, чтобы это произошло, ваш собственный код на С++ должен быть скомпилирован для машинного кода и получить оптимизацию оптимизатора кода компиляции.
Отключите параметр /clr для этого файла исходного кода и, возможно, других, в вашем проекте. Щелкните правой кнопкой мыши + Свойства, Общие. Если в файле .h будет отображаться символ mutex
, который должен содержать #include в исходном файле С++/CLI, тогда у вас есть большая проблема, используйте интерфейс или pimpl, чтобы скрыть детали реализации.