收到此错误时如何实现非托管线程安全集合: <mutex> 使用 /clr 编译时不支持
How to implement a unmanaged thread-safe collection when I get this error: <mutex> is not supported when compiling with /clr
我有一个c++应用程序,它由非托管c++、托管c++和c#组成。在非托管部分,我试图创建一个线程安全的集合使用std::互斥。
然而,当我使用互斥锁时,我得到以下错误;
error C1189: #error:
在使用/clr或/clr:pure编译时不支持。
知道为什么我不能使用互斥锁吗?有人可以推荐替代它,以便我可以创建一个线程安全的非托管集合?
不支持,因为std::互斥对象实现使用GetCurrentThreadId()。这是一个winapi函数,不假定在托管代码中使用,因为它可能运行在不使用线程实现线程的自定义CLR主机上。
这是一个很好的问题,它表明你的代码是错误的。本机c++正在使用/clr进行编译。它工作得非常好,所有兼容c++ 03的代码都可以编译成MSIL,并在运行时进行即时编译,就像托管代码一样。如果你不希望这种情况发生,你的本地c++代码应该被编译成机器码,并得到编译时代码优化器的支持。
关闭这个源代码文件的/clr选项,可能还有项目中的其他源代码文件。右键单击+属性,常规。如果mutex
出现在你必须#包含在c++/CLI源文件中的.h文件中,那么你有一个更大的问题,使用接口或pimpl来隐藏实现细节。
相关文章:
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 如何将ampl中的集合表示为c++中的向量
- 呼叫运营商<<临时
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 实现一个在集合上迭代的模板函数
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 尝试使用集合函数时出现分段错误
- 互斥指针的集合
- <<操作员在下面的行中工作
- c++找不到具有相同哈希的无序集合元素
- python集合的C++等价物是什么.计数器
- 如何在C++中递归地按相反顺序打印集合
- Python 集合.计数器,如何避免重复查找
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?