異なるクラス階層の 2 つのクラス間で同じクリティカル セクション オブジェクトを共有するという問題に対して、適切な設計ソリューションを見つけるのに苦労しています。
想像:
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 オブジェクトを使用しているのですが、どうすればよいのでしょうか。
私はいくつかのアイデアを理解することができました:
悪い
critical_section m_cs;
- A または B のいずれかの適切なメンバー ( ) を作成し、
a) IA から A (または IB から B にそれぞれ) にダウンキャストし、それを使用します
b) 静的にし、呼び出しますA::m_cs
(またはB::m_cs
)BETTER - critical_section オブジェクトを管理し、それへのアクセスを提供する追加のシングルトン オブジェクト/構造体を作成します。
class CriticalSectionProvider { //(...) public: static critical_section& GetIt() { static critical_section cs; return cs; } }
残念ながら、私はこれらのどれにも満足しておらず、誰かがより良いアイデアを持っていると思います.
この場合、2 つのクラス間で単一のクリティカル セクションを共有する方法は?