【发布时间】:2018-01-29 17:05:42
【问题描述】:
我有一个 C 客户端正在监听 Tibco RV(使用 8.4.0)。源非常频繁地在 PREFIX1.* 和 PREFIX2.* 上输出消息(每秒可能多次)。
我有六个线程,每个线程都监听一个特定的 SUFFIX,例如 PREFIX1.SUFFIX_A 和 PREFIX2.SUFFIX_A。所以每个线程都有一个监听器和它自己的用于这两条消息的队列。我的队列大小限制为 1000,如果我们达到这个限制,则删除最旧的 200 个(但在繁忙时间队列中永远不会超过 40 个)。
运行好几个小时后,程序每天都突然停止接收数据。源继续发布,但我不再从任何队列分派事件。我不明白是什么原因造成的(除了删除侦听器)。
什么可能导致收听停止?或者,鉴于系统是高频的,如何对此进行调查?我可以通过 C 接口判断侦听器是否仍然处于活动状态?我在 API 中看不到任何内容。
感谢您的帮助, -戴夫
【问题讨论】:
-
多线程程序中的间歇性、罕见错误几乎总是由竞争条件引起的。所以这就是你应该停止搜索的地方:检查多个线程之间共享的所有变量。
-
线程之间的共享状态非常少。 tibrv dll 内部可能还有很多事情要做,但我当然对此一无所知。我想知道这是否可能是 RV 可能进入的已知状态。