ORBacusを使用しています。マルチスレッド アプリケーションを使用しており、複数の ORB オブジェクトを同じプロセスに配置したいと考えています。アイデアは、各スレッドが独自の ORB を持ち、異なるサーバーに接続されることです。
これは可能ですか?もしそうなら - どのように?
"何を試しましたか? " : 試しました
CORBA::ORB_var m_varOrb;
各スレッドで。各スレッドが呼び出します。各スレッドにはReconnect
メソッドがあり、次を実行します。
// ...
m_varOrb = CORBA::ORB_init( argc, argv );
問題、私は持っています:
複数のスレッドが同時に再接続しようとすると、アプリケーションが
m_varOrb->destroy();
または でクラッシュしCORBA::ORB_init
ます。スレッドの同期を試みたので、すべてのスレッドが構成済みのサーバーに 1 つずつ ( を使用して
static mutex
) 再接続しようとしましたが、まだ機能していません。1 つのスレッドが「その」ORB オブジェクトを破棄しようとすると、再びクラッシュしdestroy
ます (いくつかのアサートが失敗し、一部の参照カウントが > 1 であるため、実際の ORB オブジェクトへの参照カウント ポインターのように見えます)条件付き待機を追加したので、スレッド
ORB_init
はすべてのスレッドが実行されたときにのみ呼び出しを開始しdestroy
ます。ORBの周りにシングルトンラッパークラスを作成し、スレッドを同期して次々に接続すると、すべてが完全に正常に機能し始めました。しかし、これは、ORB が 1 つしかないため、サーバーが 1 つだけであることを意味します。悪い。
したがって、これらすべてのことから、プロセスごとに 1 つの ORB オブジェクトしか持てないことがわかりました。何か不足していますか?