1

以下是我的查询。我对粗体文本有疑问。“你将编写一个程序,它使用多个进程来计算一组(小)正整数的总和。这个作业有两种类型的进程:I)。一组“从属”进程:每个从属进程有两个argv 中的小整数,计算其总和并使用 exit 系统调用返回结果。因此,为每个总和创建一个从属进程。II)“主”进程:该进程负责创建从属进程,并协调计算。请注意,所有计算都是由“从”进程完成的。所有数字都在命令行 argv 中提供。主进程还在计算开始时将计时器设置为 3 秒。如果此时计算还没有完成,则主进程杀死所有从进程,然后退出。在这种情况下,您应该打印适当的消息。请注意,主进程可能必须创建多组从进程。例如,如果有 8 个数字要相加,那么主进程会先创建 4 个从进程,然后从它们那里得到结果。此时有 4 个数字,它创建了 2 个奴隶。最后创建一个从站来计算总和。为简单起见,如果要添加的整数个数是奇数,则主节点将 0 添加到数字列表中。这可能发生在计算过程中的任何步骤。主进程的代码应单独编译,其可执行代码应称为主进程。从属进程的可执行代码应称为从属进程。因此,要计算数字 1 到 7 的总和,命令行看起来像 master 1 2 3 4 5 6 7 由于结果是通过 exit 系统调用传递的,所以保持数字很小(一位数)。每个从属进程打印它的进程 ID、它的操作数和它们的总和。每次 master 从 slave 获得结果时,它都会打印 slave 的 pid 和部分总和。”

4

3 回答 3

2

您被要求使用流程。这意味着您需要fork为每个需要的工人提供服务。还

主进程还在计算开始时将计时器设置为 3 秒。如果此时计算还没有完成,则主进程杀死所有从进程,然后退出。

最好设置alarm,它会向您发送一个信号SIGALARM,当收到信号时,您将使用kill特定的进程 ID(您可以从 获取它们fork)。如果您的工人将完成,那么您的主要流程和警报也不会触发。

如果您是多进程编程的新手,这在某种程度上是一项复杂的任务。现在只需尝试创建一些进程并在 3 秒后杀死它们。如果您还有更多问题,请发布您的代码并提出具体问题。

于 2013-10-08T09:29:14.587 回答
0
  1. 创建线程时,存储它们的标识符。
  2. 在 中创建线程后main(),使用 egsleep(3)或其他方式暂停。
  3. 循环存储的线程 ID:s,调用pthread_cancel()以杀死它们。杀死已经终止的线程会导致这个调用失败,但这没关系。
于 2013-10-08T08:02:54.390 回答
0

不确定我是否正确回答了您的问题。您可能希望为每个执行计算的工作线程启动一个辅助线程。将工作线程的 tid 传递给它的辅助线程,让辅助线程休眠 3 秒,然后检查工作线程是否已退出,如果没有则将其杀死。或者,如果您有一个专用的计时器模块/任务,您可以为每个工作线程启动一个计时器。

于 2013-10-08T08:13:57.950 回答