请问Xtang以及论坛的各位大大,如何同时触发启动多个程序

中文QNX 讨论: 欢迎大家灌水,讨论有关QNX 问题。

请问Xtang以及论坛的各位大大,如何同时触发启动多个程序

帖子xuehuazhou » 周日 7月 10, 2011 7:43 pm

我的遇到问题是这样的,A,B,C等多个程序,我想同时启动它们(因为他们之间会存在数据的交互,因此想同步启动它们),不知是否可以通过一个信号量的方式来实现呢?就是发一个信号量,当A,B,C收到该信号量的时候程序就会自动启动。若是如此,大概的步骤该怎么做呢?
xuehuazhou
Senior Member
 
帖子: 33
注册: 周一 6月 20, 2011 4:39 pm

Re: 请问Xtang以及论坛的各位大大,如何同时触发启动多个程序

帖子xtang » 周一 7月 11, 2011 3:25 pm

如果A, B, C还没有启动的话,它们是没有办法收到信号量的。(程序必须先执行)

你的问题,归结到A, B, C 三个程序启动后,如何同步到某一点上。如果是三个进程,命名信号量可以做这件事。也可以让三个进程启动,初始化,一切都准备好后,发个消息给服务器S,当S收到所有进程的“初始化终了”信息后,再一一回复它们,让它们继续执行下去。
xtang
Moderator
 
帖子: 1815
注册: 周五 9月 12, 2003 4:14 am
地址: China

Re: 请问Xtang以及论坛的各位大大,如何同时触发启动多个程序

帖子xuehuazhou » 周一 7月 11, 2011 3:56 pm

xtang 写道:如果A, B, C还没有启动的话,它们是没有办法收到信号量的。(程序必须先执行)

你的问题,归结到A, B, C 三个程序启动后,如何同步到某一点上。如果是三个进程,命名信号量可以做这件事。也可以让三个进程启动,初始化,一切都准备好后,发个消息给服务器S,当S收到所有进程的“初始化终了”信息后,再一一回复它们,让它们继续执行下去。

恩,明白你的意思,先将A,B,C三个程序先启动,然后阻塞。利用服务端来回复它们。请问否可以采取这样的方式,服务端采用一个广播式的发送一个信号量,A,B,C都可以同时接收到。然后就可以保证他们可以同时往下执行了。
xuehuazhou
Senior Member
 
帖子: 33
注册: 周一 6月 20, 2011 4:39 pm

Re: 请问Xtang以及论坛的各位大大,如何同时触发启动多个程序

帖子xtang » 周一 7月 11, 2011 11:11 pm

xuehuazhou 写道:恩,明白你的意思,先将A,B,C三个程序先启动,然后阻塞。利用服务端来回复它们。请问否可以采取这样的方式,服务端采用一个广播式的发送一个信号量,A,B,C都可以同时接收到。然后就可以保证他们可以同时往下执行了。


取决于你的“同时”的定义是什么。MsgReply()不是一个阻塞操作。

A,B,C都在S上REPLY_BLOCK后,S做MsgReply(A);这时A被恢复为READY,加入READY队列,但当前执行进程仍然是S。S可以继续MsgReply(B),导致B进入READY队列;然后MsgReply(C),C变成READY;

接下来当S放弃CPU时(时间片到了,或是又阻塞了),在READY队列中的A,B,C开始竟争CPU,没有特殊调度的情况下,按A、B、C的顺序依次执行。

不知道这样,够不够“同时”。

不管你想完成的是什么,进程间(或是线程间)的执行关系,只应该依赖同步(mutex, condvar, barrier,...)来实现,而不是调度算法。
xtang
Moderator
 
帖子: 1815
注册: 周五 9月 12, 2003 4:14 am
地址: China

Re: 请问Xtang以及论坛的各位大大,如何同时触发启动多个程序

帖子xuehuazhou » 周二 7月 12, 2011 10:13 am

xtang 写道:
xuehuazhou 写道:恩,明白你的意思,先将A,B,C三个程序先启动,然后阻塞。利用服务端来回复它们。请问否可以采取这样的方式,服务端采用一个广播式的发送一个信号量,A,B,C都可以同时接收到。然后就可以保证他们可以同时往下执行了。


取决于你的“同时”的定义是什么。MsgReply()不是一个阻塞操作。

A,B,C都在S上REPLY_BLOCK后,S做MsgReply(A);这时A被恢复为READY,加入READY队列,但当前执行进程仍然是S。S可以继续MsgReply(B),导致B进入READY队列;然后MsgReply(C),C变成READY;

接下来当S放弃CPU时(时间片到了,或是又阻塞了),在READY队列中的A,B,C开始竟争CPU,没有特殊调度的情况下,按A、B、C的顺序依次执行。

不知道这样,够不够“同时”。

不管你想完成的是什么,进程间(或是线程间)的执行关系,只应该依赖同步(mutex, condvar, barrier,...)来实现,而不是调度算法。

恩,明白你的意思了,Xtang,非常感谢。你描述得非常清楚,thx.
xuehuazhou
Senior Member
 
帖子: 33
注册: 周一 6月 20, 2011 4:39 pm


回到 四海同心QNX论坛

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客

cron