Chinaunix

标题: 关于进程线程混和使用中unix消息队列使用问题 [打印本页]

作者: foxmary    时间: 2005-05-30 17:01
标题: 关于进程线程混和使用中unix消息队列使用问题
小弟在AIX 5L上边写一个简单的C/S程序,用系统的消息队列传递报文,但是由于客户端采用进程线程混合调用的方式,就不知道消息队列中的消息类别该用什么代替,我曾经创建一块共享内存做计数器,用计数器中的数据作为消息类别,但是对速度有较大影响。是在不知道该怎么办,哪位高人指点一下:([/i]
作者: foxmary    时间: 2005-05-30 17:22
标题: 关于进程线程混和使用中unix消息队列使用问题
感觉这个问题不简单,自己顶一下!
作者: foxmary    时间: 2005-05-30 17:39
标题: 关于进程线程混和使用中unix消息队列使用问题
可能是我描述不清楚吧,这个问题是这样的,我的客户端原来采用进程方式调用,这样我每次取进程ID作为msgbuf结构中的mtype,但是后来调用方式改变了,在每个进程里面都要创建多个线程做某项工作,这样的话就会出现串包现象,如果改用线程ID作为mtype,也会出现串包,用随机数吧又不敢保证它不重复,用计数器速度会限制,现在就是想问问系统还有没有别的唯一值可用的?各位高手,千万别不屑一顾呀。
作者: yuxh    时间: 2005-05-30 18:34
标题: 关于进程线程混和使用中unix消息队列使用问题
(线程号<<16)  + 进程号
假设线程号和进程号都<65536
作者: foxmary    时间: 2005-05-30 19:54
标题: 关于进程线程混和使用中unix消息队列使用问题
这种方法看起来不错,但是现在那些系统进程ID都排到上百万了,怎么能<65536? any way,多谢。
作者: albcamus    时间: 2005-05-31 09:38
标题: 关于进程线程混和使用中unix消息队列使用问题
Linux吗?瞎说一句:或许HZ可用呢
作者: foxmary    时间: 2005-05-31 14:20
标题: 关于进程线程混和使用中unix消息队列使用问题
hehe ,如果是Linux就好了,那样直接取进程号,可惜是AIX 5L 5.2,进程ID超长,不好控制。
作者: blchang    时间: 2005-05-31 17:52
标题: 关于进程线程混和使用中unix消息队列使用问题
自己生成一个唯一ID,当然要控制好不要重复就可以。。。
作者: AFM    时间: 2005-06-01 08:44
标题: 关于进程线程混和使用中unix消息队列使用问题
不用消息队列不就是了?
作者: Celetium    时间: 2005-06-01 09:14
标题: 关于进程线程混和使用中unix消息队列使用问题
使用自己的计数器是最好办法,速度不是问题,首先互斥区很小,只有一个no++的代码,再者锁的速度很快,还有如果你觉得线索太多抢得厉害,你可以做计数器组,分组使用,每个计数器涵盖不同的数值范围。
作者: FH    时间: 2005-06-01 09:20
标题: 关于进程线程混和使用中unix消息队列使用问题
楼上真是好主意啊!就是不知道服务器该怎么了解客户端的分组。
作者: ccccc2011    时间: 2011-10-30 18:35
为了防止串包,消息队列中可以加标识,相当于一个信封,在系统中,开辟线程很浪费资源,所以系统对开辟的线程数有限制,为了使标识唯一,可以通过getPid的一个方法得到这个系统分配给线程的唯一标识,但是线程被回收后,又可以使用所以通过给信封设置线程的ID和分配的时间,就可以成为唯一的标识,可以防止串包等问题,自己菜鸟,如果哪位高手还有更高明的方法,可以指教。。。
作者: ccccc2011    时间: 2011-10-30 18:55
也可一得到连接的ID,因为它也是唯一的标识给消息setStringProperty加到信封上,也可以唯一标识




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2