我有一个任务是从命令行中取出一个字符串,并使用fork()将其逆转并在单独的子进程中输出每个字符。我只是没有从fork()调用获取正确的输出。问题是索引在输出上混乱了,比如3,1,2,0,当它应该是3,2,1,0 ...等等......什么让它更容易混淆,它是随机成功的单词长度为3个字符(但不总是),但对于4个字符以上的单词而言,通常不正确。没有fork()调用,循环正常工作。使用fork()为每个孩子输出1个数组元素,C++
这是我的主要功能,问题存在于for循环中。
int main(int argc, char **argv){
pid_t childpid = 0;
int i;
char* invert = new char[strlen(argv[1])+1];
int invert_length = strlen(argv[1]);
strcpy(invert, argv[1]);
for(i=invert_length-1; i>=0; i--){
childpid = fork();
if(childpid==(pid_t) 0){
//I am the child
cout<<"Child ["<< i <<"] = " << invert[i] <<"."<<endl;
break;
}
}
return 0;
}
非常感谢!我正准备在使用睡眠(5 /(i + 1))方法后才能注销,并且每次都有效地计时,但是看到了您的帖子并认为这样会更好。 – Nibirue 2012-07-11 11:05:09
尽管这确实解决了原始问题,但它实际上是一个单一的流程解决方案。每个新进程在前一个进程完成时创建。如果我是一位设置这个问题的老师,我可能会因此失败,因为中心概念是协调并发进程而不是如何对它们进行序列化。对它们进行串行化使得使用多个进程的整个过程失败。 – Skizz 2012-07-11 15:57:55
@Skizz:任何形式的协调都可以有效地序列化它们。考虑到问题的参数,我提出的解决方案是最有效的方法。 Regards – jxh 2012-07-11 16:03:51