找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 7921|回复: 6

TAO 死锁

[复制链接]
发表于 2012-6-4 12:31:36 | 显示全部楼层 |阅读模式
各位大侠,请教个问题。
我用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不被阻塞,直接返回?先行谢过!
发表于 2012-6-4 14:01:47 | 显示全部楼层
这是服务器端软件的问题了吧?但你又改不了,只好找服务器端的人问清楚。你的客户端难道不能一边checkconnection一边做别的?非得一直要起个线程干这个?如果必须用线程,能用队列操作么?就是主线程和checkconnection线程,都用一个task队列,checkconnection线程发现有其它要求,就自己发给服务器端。
 楼主| 发表于 2012-6-4 14:30:34 | 显示全部楼层
checkconnection是一定要的。server起个线程阻塞在session->checkconnection(),如果client break掉 checkconnection,server就认为client down掉了。
我感觉现在我的问题就是没有多路分解request/reply. client orb 一直阻塞在checkconnection, 如果有新的reply从server返回,比如gethostname,这个就会被一直阻塞直到checkconnection完成。有没有方法可以同时处理这些request/reply?
发表于 2012-6-4 16:16:02 | 显示全部楼层
必须让server端提供调用规范。否则没法用了。
 楼主| 发表于 2012-6-4 17:13:30 | 显示全部楼层
谢谢你的回复!
接口都是idl定义好了的。现在做代码移植,orbix to tao两个产品都不熟悉,有点扯蛋。只能根据以前的框架去改。
checkconnection 是 rootPOA 对应的servant的方法。只要client响应checkconnection。server端的reply都被阻塞在队列里面。
发表于 2012-8-24 01:18:38 | 显示全部楼层
orbix 和 tao的orb基本实现上都没问题,你有了ref,narrow成功后,一切交给orb,如果用到一些特殊的svcs,他们不一定兼容。
发表于 2013-3-14 09:48:57 | 显示全部楼层
一般死锁,看看你的几个逻辑进程间是否存在共享资源竞争。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-4 19:04 , Processed in 0.013530 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表