如何设计2个有互相调用关系的进程间通讯

中文QNX 讨论: 欢迎大家灌水,讨论有关QNX 问题。
回复
b0207191
Senior Member
帖子: 22
注册时间: 周六 5月 15, 2010 8:17 pm

如何设计2个有互相调用关系的进程间通讯

帖子 b0207191 » 周日 5月 16, 2010 10:49 pm

比如a调用b执行一个设置
b处理过程中又需要查询a的数据库


如果一个方向采用异步,会割裂该模块逻辑,头痛。。。

canghaiyisu
Senior Member
帖子: 27
注册时间: 周日 8月 13, 2006 10:46 pm

帖子 canghaiyisu » 周一 5月 17, 2010 12:34 am

建议使用多线程,比如a进程中创建多个线程完成不同的功能。
在规划进程的时候就要考虑到模块功能以及进程/线程通讯模式。

b0207191
Senior Member
帖子: 22
注册时间: 周六 5月 15, 2010 8:17 pm

帖子 b0207191 » 周一 5月 17, 2010 2:54 pm

之前看过另外一个帖子,说使用多线程也有隐患,如果某个rcv线程里调用了send,那么还是有可能造成互锁
里面说用event实现,但是这样会割裂模块原有逻辑

xtang
Moderator
帖子: 1816
注册时间: 周五 9月 12, 2003 4:14 am
来自: China

帖子 xtang » 周二 5月 18, 2010 10:43 am

b0207191 写了:之前看过另外一个帖子,说使用多线程也有隐患,如果某个rcv线程里调用了send,那么还是有可能造成互锁
里面说用event实现,但是这样会割裂模块原有逻辑
使用多线程的意思,打个比方,是一个线程负责收,一个(多个)线程负责处理、发送;收数据线程只接收数据,然后转交给处理、发送线程(线性表,队列)。

即使是这样的设计,也会有隐患。比如收数据线程与别的线程间有没有互锁同步。如果增加收线程个数,同步关系会更复杂。这个需要在设计时仔细考虑周到。

传统的方法(以前还没有线程呢),是设立第三方进程C,A和B通过C进行通讯。由C做为中间人传递数据;这种做法的缺点是数据传递效率相对比较低。

回复