Mir*_*cko 28 c++ multithreading mutex c++-cli thread-safety
我有一个C++应用程序,它由非托管C++,托管C++和c#组成.在非托管部分,我正在尝试使用std :: mutex创建一个线程安全集合.
但是,当我使用互斥锁时,我收到以下错误;
错误C1189:使用/ clr或/ clr:pure进行编译时不支持#error:<mutex>.
知道为什么我不能使用互斥锁吗?有人可以推荐替换它,以便我可以创建一个线程安全的非托管集合吗?
Han*_*ant 16
它不受支持,因为std :: mutex实现使用GetCurrentThreadId().这是一个不应该在托管代码中使用的winapi函数,因为它可能在不使用线程实现线程的自定义CLR主机上运行.
这是一个很好的问题,它表明你正在构建错误的代码.您的本机C++正在使用/ clr进行编译.哪个工作得相当好,所有符合C++ 03标准的代码都可以编译为MSIL并在运行时进行即时编译,就像托管代码一样.您不希望这种情况发生,您的本机C++代码应编译为机器代码并获得编译时代码优化器的喜爱.
在项目中关闭此源代码文件的/ clr选项,可能还有其他选项.右键单击+属性,常规.如果mutex
出现在.h文件中,您必须在C++/CLI源文件中进行#include,那么您遇到了更大的问题,请使用接口或pimpl来隐藏实现细节.
归档时间: |
|
查看次数: |
15899 次 |
最近记录: |