C++/Clr 中C++全局实例上的多线程
Multi threading on C++ global instance in C++/Clr
我有一个有 2 个方法的类,比如连接和断开连接。现在,当我调用 B 类时,我会得到一个 A 的地址,我将使用该地址进行连接,一旦完成,我必须调用 C 类以在同一地址上执行断开连接操作。
如果我将 A *a 作为全局变量,我可以实现这一目标。但是当涉及到多线程并且 A 是全局的时,它只使用一个地址/实例,并且在其他线程运行之前断开连接,从而导致访问冲突异常。
如何解决这个问题?提前谢谢。
class A()
{
Connect();
Disconnect();
};
A *a = nullptr;
class B()
{
a = new A();
a->Connect();
}
class C()
{
if(!a)
a->Disconnect();
}
起初,类 c 中的 if 条件不正确。它应该是如果(a(。因为如果一个变量具有空值,那么它可以传递你的 if 条件,并且你想调用空变量的断开连接方法。其次,您应该考虑在 B 类线程之后运行 c 类线程。
如何用锁保护对 的任何访问,至少它可以避免多线程时 a 的状态问题。
http://www.cplusplus.com/reference/mutex/mutex/lock/
如果由于 c++CLI 限制而无法使用,请尝试使用 带有 gcroot 锁定句柄
或者使用魔术静力学。但请注意,如果 A 类访问任何 .NET 资源并在应用程序结束时被破坏,同时清理这些静态数据,那么它将以崩溃告终,或者至少可能导致无法释放资源。
发布魔术静态线程安全吗?
我一开始使用了锁,但后来我可以更改为其他方式,不再依赖于静态全局对象。
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 通过安装信号处理程序关闭多线程应用程序
- 成员变量在多线程 C++ 时自行更改
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误