TAO 死锁
各位大侠,请教个问题。我用nameservice连接到tao server端,可以实现通信。由于server端是不可定制的,对我不可见。它会发一个checkconnection 的函数给Client保证连接。这个函数是一个无限循环while(1)函数,通过sleep切换线程。client是单orb的,当然会起一个线程来运行checkconnection。 现在的问题是如果保持checkconnection运行,然后再在主线程给server发gethostname的请求,程序会阻塞在这儿。写过测试程序模拟这种情况,感觉就是server端的orb在checkconnection的同时没法响应gethostname。或者说client的servant在响应checkconnection的同时无法获取gethostname的reply。可能是在排队。有没有方法使得gethostname不被阻塞,直接返回?先行谢过! 这是服务器端软件的问题了吧?但你又改不了,只好找服务器端的人问清楚。你的客户端难道不能一边checkconnection一边做别的?非得一直要起个线程干这个?如果必须用线程,能用队列操作么?就是主线程和checkconnection线程,都用一个task队列,checkconnection线程发现有其它要求,就自己发给服务器端。 checkconnection是一定要的。server起个线程阻塞在session->checkconnection(),如果client break掉 checkconnection,server就认为client down掉了。
我感觉现在我的问题就是没有多路分解request/reply. client orb 一直阻塞在checkconnection, 如果有新的reply从server返回,比如gethostname,这个就会被一直阻塞直到checkconnection完成。有没有方法可以同时处理这些request/reply? 必须让server端提供调用规范。否则没法用了。 谢谢你的回复!
接口都是idl定义好了的。现在做代码移植,orbix to tao两个产品都不熟悉,有点扯蛋。只能根据以前的框架去改。
checkconnection 是 rootPOA 对应的servant的方法。只要client响应checkconnection。server端的reply都被阻塞在队列里面。 orbix 和 tao的orb基本实现上都没问题,你有了ref,narrow成功后,一切交给orb,如果用到一些特殊的svcs,他们不一定兼容。
一般死锁,看看你的几个逻辑进程间是否存在共享资源竞争。
页:
[1]