我有一個任務是從命令行中取出一個字符串,並使用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