使用<;螺纹>;包含在C++/CLI代码。寻找更好的解决方案 本机C++“AH”:
我的解决方案:使用<;螺纹>;包含在C++/CLI代码。寻找更好的解决方案 本机C++“AH”:,c++,multithreading,c++-cli,C++,Multithreading,C++ Cli,我的解决方案: 本机C++“AH”: “a.cpp” 如何在没有动态内存分配的情况下做到这一点 这安全吗?在C++/CLI环境中,我不知何故使用了中的包装内容,只是没有在标题中使用 有更好的方法吗?新/删除和每次使用的强制转换似乎都很糟糕。我希望类的每个对象都有一个互斥对象 模板在这里帮助你 a、 h: 模板 甲级 { //... 私人: // ... 互斥类型互斥; }; 然后,在你的主要或任何地方: #inculde <thread> //... a<std::mute
本机C++“AH”:
“a.cpp”模板在这里帮助你 a、 h:
模板
甲级
{
//...
私人:
// ...
互斥类型互斥;
};
然后,在你的主要或任何地方:
#inculde <thread>
//...
a<std::mutex> instance;
#包括
//...
实例;
如果愿意,您还可以使用using语句进行清理,以获得更干净的代码:
#inculde <thread>
//...
using MutexA = a<std::mutex>;
//...
MutexA instance;
#包括
//...
使用MutexA=a;
//...
互斥实例;
在寻求更好的解决方案时,您需要解释您想要实现的目标,而不仅仅是展示您的解决方案。没有动态内存分配?只需使用mutex
而不是mutex*
?“只需使用mutex而不是mutex*”确定。怎么做?PIMPL习语。你能在C++中使用标准的C++库吗?它是非法的,你不能假定.NET代码使用操作系统线程。这取决于主机,从技术上讲,它可能使用光纤而不是线程。事实上,这并不值得深为担忧,“绿色线程”在上个世纪很流行,并被多核革命所淘汰。但规则是,如果是光纤,你的互斥锁根本无法工作。您需要对C++/CLI编译器隐藏实现细节,标准技术是抽象接口或pimpl习惯用法。
class a
{
a();
~a();
//...
private:
// ...
void* mutex;
};
#include <thread>
a::a()
{
mutex = new std::mutex;
}
~a::a()
{
delete mutex;
}
#include "a.h" // no error
template <class MutextType>
class a
{
//...
private:
// ...
MutextType mutex;
};
#inculde <thread>
//...
a<std::mutex> instance;
#inculde <thread>
//...
using MutexA = a<std::mutex>;
//...
MutexA instance;