【发布时间】:2012-10-17 11:57:09
【问题描述】:
我使用ORBacus。我有一个多线程应用程序,我希望在同一进程中有多个 ORB 对象。想法是:每个线程都有自己的 ORB 并连接到不同的服务器。
这甚至可能吗?如果是这样 - 如何?
“你试过什么?”:我有
CORBA::ORB_var m_varOrb;
在每个线程中。每个线程调用。每个线程都有Reconnect方法,执行:
// ...
m_varOrb = CORBA::ORB_init( argc, argv );
问题,我有:
当多个线程同时尝试重新连接时,应用程序在
m_varOrb->destroy();或CORBA::ORB_init中崩溃。我尝试同步线程,以便所有线程尝试一一重新连接到已配置的服务器(使用
static mutex) - 仍然无法正常工作 - 当一个线程尝试销毁“它的”ORB 对象时- 在destroy中再次崩溃(某些断言失败,因为某些引用计数 > 1;看起来像是指向真实 ORB 对象的引用计数指针)我添加了一个条件等待,所以只有当所有线程都执行
destroy时,线程才开始调用ORB_init;在 ORB 周围制作了一个 singleton 包装类,同步线程以一个接一个地连接,一切都开始正常工作。 但这意味着 - 只有一个 ORB,所以只有一个服务器。 不好。
所以,所有这些事情都让我觉得我被允许每个进程只有一个 ORB 对象。我错过了什么吗?
【问题讨论】:
标签: c++ multithreading corba orbacus