首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fork执行多个命令

使用fork执行多个命令
EN

Stack Overflow用户
提问于 2011-06-21 20:00:01
回答 4查看 291关注 0票数 0

我有一个类指针列表。我有一个从这些指针调用方法的函数。列表中的每个指针都是主类的派生类。我现在所做的就是遍历列表并调用列表中第一个指针的方法,等待它完成,然后转到第二个类对象指针并调用该方法,依此类推。

现在我有大约20个派生类,完成这个列表需要花费很长时间。所以我想使用fork一次执行4-5个类方法,这样整个过程就快了很多。

代码语言:javascript
复制
list<Myclass *> check;

myfunc(list<Myclass *> check)
{
     for(list<Myclass*>::iterator a= check.begin();a!=check.end();a++)
          (*a)->run();
}

这是我所拥有的东西的一个骨架。我想要的是每次它都会派生并创建一个子进程来执行命令,然后移动到下一个进程……

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-21 20:08:20

是的,您可以使用fork()在子线程中执行一些工作。但是,一旦子进程完成了它的工作,它就会返回,并且您不会在它们之间共享数据。我不清楚你的实现,但是如果你的意图是派生一些进程来做一些额外的工作,那么这似乎是可以的,但你可能需要一个线程,而不是fork。

票数 1
EN

Stack Overflow用户

发布于 2011-06-21 20:03:45

您更可能希望启动一个线程,而不是派生一个进程。当涉及到指针时,这会更容易,因为指针可以在进程内共享,但不能在外部共享。

此外,派生进程会带来一些性能开销。

票数 0
EN

Stack Overflow用户

发布于 2011-06-21 20:10:00

不过,您并没有用fork传回任何内存。你可能需要一个线程。下面是如何做到这一点的:

代码语言:javascript
复制
int i = 0;
int n = 4; //or 5;

list<Myclass> check; // You can't use pointers here though, as the memory is not shared.

myfunc(list<Myclass> check)
{
     for(list<Myclass>::iterator a= check.begin();a!=check.end();a++) {
          if(i >= n) {
              wait();
          } else {
              if(fork() == 0) {
                  a->run();
                  exit(0);
              } else {
                  i++;
              }
          }
     }

     // Prevent a voodoo priest from making zombies of these processes.
     while(i-->0) wait();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6424874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档