#include <iostream>
#include <mutex>
using namespace std;
class A;
class B {
public:
B(A *_parent = nullptr) {
parent = _parent;
}
A *parent;
};
class A {
public:
std::mutex m;
B *b;
A() {
b = new B(this);
}
};
int main() {
A a_obj;
B *b = new B(&a_obj);
//b->parent->m.lock();
return 0;
}
我相信上面的组合对象按预期运行,我一直在使用类似的设计(我的A创建B并将它们添加到数据结构中.B的构造是对其父级的引用。)
当我尝试在A和B之间添加线程安全消息传递时,只要B尝试在A中使用线程安全容器,程序就会崩溃。
上面的代码重现了这个问题。为什么B不能获得A的互斥量?