如何在两个类别之间共享一个临界区

| 对于在不同类层次结构中的两个类之间共享同一关键部分对象的问题,我很难找到正确的设计解决方案。 想像:
class IB;
class IA { 
    public: void method_one(); 
};
class A : public IA { 
    IB* m_ib; 
};

class IB { 
    public: void method_two(); 
};
class B : public IB { 
    IA* m_ia; 
};
现在,对method_one()和method_two()的调用应该同步。我碰巧使用critical_section对象进行同步,但是想知道我该怎么做。 我设法弄出了一些主意: BAD-创建A或B的合适成员(
critical_section m_cs;
),并且 a)从IA向下转换为A(或分别从IB向下转换为B),并使用它 b)将其设为静态,然后调用
A::m_cs
(或
B::m_cs
) 更好-创建其他单例对象/结构来管理critical_section对象并提供对其的访问:
class CriticalSectionProvider {
    //(...)
public: 
    static critical_section& GetIt() { static critical_section cs; return cs; }
}
不幸的是,我对这些都不满意,并且认为有人可能有更好的主意。 在这种情况下,如何在两个班级之间共享一个关键部分?     
已邀请:
最简单的方法是:在创建要共享对象的任何线程之前,在main()中创建ѭ5的实例。 将其传递给类的构造函数并将其存储为引用:
class A : public IA { 
    IB* m_ib; 
    critical_section & m_cs; //reference
    public:
           A(critical_section & cs) : m_cs(cs) {}
};

class B : public IB { 
    IA* m_ia; 
    critical_section & m_cs; //reference
    public:
           B(critical_section & cs) : m_cs(cs) {}
};

int main()
{
    critical_section cs = /*create it*/;

    A a = cs; //call the constructor, passing the reference
    B b = cs; //call the constructor, passing the reference
}
    

要回复问题请先登录注册