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

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

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

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

恩,明白你的意思,先将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.