如何实现非托管线程安全的集合,当我得到这个错误: 使用/ clr编译时不支持(How to i

2019-08-19 15:51发布

我有一个C ++应用它由非托管C ++的,托管C ++和C#。 在非托管的部分,我想创建使用std ::互斥线程安全的集合。

然而,当我使用互斥我碰到下面的错误;

错误C1189:#ERROR:纯:<互斥>未使用/ clr或/ CLR编译时支撑。

任何想法,为什么我不能使用互斥? 有人可以推荐一个替代它,这样我可以创建一个线程安全的非托管集合?

Answer 1:

它不支持,因为的std ::互斥实现使用GetCurrentThreadId()。 这是不应该出现在托管代码中使用,因为它可能不使用线程来实现线程的自定义CLR主机上运行的WINAPI功能。

这是好样的问题有,那就说明你正在构建你的代码错误。 你的本地C ++被编译在效果/ CLR。 其作品而太清楚了,所有的C ++ 03兼容的代码可以编译成MSIL和得到公正,及时在运行时编译,就像托管代码。 你不希望这样的事情发生,你的本地C ++代码应被编译成机器代码,并获得编译时代码优化的爱情。

关闭/ CLR选项这个源代码文件,以及其它可能的,在您的项目。 用鼠标右键单击+属性,一般。 如果mutex出现在你的C ++ / CLI源文件#包括那么你有一个更大的问题.h文件,使用一个接口或PIMPL隐藏实现细节。



文章来源: How to implement a unmanaged thread-safe collection when I get this error: is not supported when compiling with /clr