我試圖使此代碼正常工作時遇到問題。我想要做的是讓我的程序並行計算一些特定的算法。有些時候它有效,有些時候卻不行。這種情況經常發生在我用大數字運行時,但我可以在頂部(linux命令)看到很多已停止的進程,我認爲這是因爲我的分支正在結束異步並且有些孩子被拋在後面。但是我一開始認爲我的邏輯至少可以完成所有的計算,因爲我已經設置了2個控制變量,標誌和alldone,它們都是共享內存空間,並且用於完成while循環。我一直在尋找一些光,現在我來這裏尋求幫助,因爲我找不到能幫助我的東西。任何人都可以用我的邏輯問題在下面的代碼中幫助我,以某種方式我的流程可以按照正確的順序完成,避免將流程停滯在後面?提前致謝!C編程邏輯 - 試圖完成線程(fork)並且不會離開不可用的進程
for(i=0;i<numforks*sizeof(int);i++)
flags[i] = 0;
*alldone = numforks;
pid = fork();
if(pid==0) {
pid1 = fork();
pid2 = fork();
pid3 = fork();
#ifdef DEBUG_F
printf("worker process\n");
#endif
do {
thisfork = thisfork -1;
if(flags[thisfork] == 0){
flags[thisfork] = 1;
#ifdef DEBUG_THREADS
printf("flags[%d] was zero now is %d\n", thisfork, flags[thisfork]);
#endif
if(thisfork == 7) {
heme(0,riall,chunk_size,r,pp,qq);
(*alldone)--;
}
if(thisfork == 6) {
heme(chunk_size,riall,chunk_size*2,r,pp,qq);
(*alldone)--;
}
if(thisfork == 5) {
heme(chunk_size*2,riall,chunk_size*3,r,pp,qq);
(*alldone)--;
}
if(thisfork == 4) {
heme(chunk_size*3,riall,chunk_size*4,r,pp,qq);
(*alldone)--;
}
if(thisfork == 3) {
heme(chunk_size*4,riall,chunk_size*5,r,pp,qq);
(*alldone)--;
}
if(thisfork == 2) {
heme(chunk_size*5,riall,chunk_size*6,r,pp,qq);
(*alldone)--;
}
if(thisfork == 1) {
heme(chunk_size*6,riall,chunk_size*7,r,pp,qq);
(*alldone)--;
}
if(thisfork == 0) {
heme(chunk_size*7,riall,chunk_size*8,r,pp,qq);
(*alldone)--;
}
}
} while(thisfork > 0 && alldone > 0);
exit(0);
} else {
wait(&stat);
}
一個不存在的進程只佔用足夠的內存來存儲執行時間等統計信息。它也佔用了進程表中的一個插槽,但除非您分出一個大數字,否則不會造成任何問題。 – Spaceghost 2012-08-07 22:16:50