在运行使用IBM Informix 4GL和Tibco RV库(libtibrv.so)构建的应用程序时,我面临一个困难的处境。
Informix 4GL不是线程安全的,并且Tibco总是创建一个线程(我认为它在创建tibrv_Open()时将其创建为sson,但也许是在创建传输之后)

由于4GL处理信号的某些行为,导致应用程序崩溃(当进程运行Tibco线程时,将运行4GL信号处理程序)。

在调试器中,我注意到此trhead似乎处于循环中……它以10秒的超时时间调用select()。

我的问题是:
-有没有避免创建线程的方法? (我认为不是)
-有没有办法配置我上面提到的超时时间?
-如果有人可以向我解释这个主题的目的,我将不胜感激。我假设我们必须忍受它,但是很高兴理解它为什么存在。也许它存在检查服务器超时?

附注:该应用程序使用C与Tibco进行接口(interface)。我不认为这很相关,但是当前的情况是在Tru64上,我相信Tibco的集合点是6.9。该环境使用pthread库。这些都是非常旧的版本。但是客户正在升级到新版本。

非常感谢您的任何评论。

最佳答案

我没有遇到Tibco,所以不确定是否可以提供帮助,但是...

我建议创建一个单独的进程来运行Tibco代码,并使用I4GL调用它当前用于与Tibco库进行通信的同一个C接口(interface),但是要取消实现,以便函数通过管道或套接字将消息发送到Tibco进程(将由初始化功能启动)。这样做的好处是,它将线程从I4GL代码(导致问题的地方)带入纯C和Tibco进程,可以编写该进程以确保不会引起麻烦。

关于multithreading - Tibco RV和线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17403052/

10-11 22:04