請讓父執行層產生P1-P7的子執行層,先產生P1-P3的子執行層,當P2結束時通知父執行層產生P4,P1與P3結束時通知父執行層產生P5 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



請讓父執行層產生P1-P7的子執行層,先產生P1-P3的子執行層,當P2結束時通知父執行層產生P4,P1與P3結束時通知父執行層產生P5
會員一級
註冊日期:
2014/4/24 22:43
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 11
MP : 2 / 191
EXP: 47
離線
請問有什麼方法讓p2子執行層結束時產生p4子執行層,不用等到p1和p3結束產生p5子執行層

2014/4/24 22:54
應用擴展 工具箱
回覆: 請讓父執行層產生P1-P7的子執行層,先產生P1-P3的子執行層,當P2結束時通知父執行層產生P4,P1與P3結束時通知父執行層產生P5
站長
註冊日期:
2005/6/10 9:50
來自 Taichung, Taiwan.
所屬群組:
網站管理員
已註冊使用者
等級: 19
HP : 0 / 450
MP : 139 / 19003
EXP: 3
離線
你可以在 parent 設一個 counter,有 thread return 時檢查並做反應。

2014/4/27 3:06
應用擴展 工具箱
回覆: 請讓父執行層產生P1-P7的子執行層,先產生P1-P3的子執行層,當P2結束時通知父執行層產生P4,P1與P3結束時通知父執行層產生P5
會員一級
註冊日期:
2014/3/5 10:26
所屬群組:
已註冊使用者
等級: 2
HP : 0 / 49
MP : 6 / 822
EXP: 97
離線
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <time.h>
//By Charlotte.HonG
int spawn(int num,int p);
int main(int argv, char * args[]) {
if( atoi(args[1])>10 || atoi(args[1])<=0){
printf("參數錯誤,請輸入1~10。(程式結束請重新啟動)\n");
return 0;
}
int i,sum[99]={0},c=0,status=0,wpid,p=0;
printf("Parent_pid = %d\n", getpid());
for(i=0;i<3;i++) {
p++;spawn(atoi(args[1]),p);
}
while ((wpid = wait( & status)) > 0) {
printf(" ● Exit status of %d was P%d (%s)", wpid, \
WEXITSTATUS(status), (status > 0) ? "accept" : "reject");
sum[WEXITSTATUS(status)] =1;c++;

/*printf("\n※ Status = ");
for (i = 1; i <= 7; i++){
printf("%d,", sum[i]);}*/
printf("\n");

if( p==3 && sum[2]==1 ){
p++; spawn(atoi(args[1]),p);}
if( p==4 && sum[1]==1 && sum[3]==1 ){
p++; spawn(atoi(args[1]),p);}
if( p==5 && sum[5]==1 ){
p++; spawn(atoi(args[1]),p);}
if( p==6 && sum[6]==1 && sum[4]==1 ){
p++; spawn(atoi(args[1]),p);}
}
if (c == 7){
/*printf("※ FinalStatus = ");
for (i = 1; i < 7; i++){
printf("%d,", sum[i]);}
printf("\n");*/
}
return 0;
}



int spawn(int num,int p) {
int pid=fork(),delay = rand() % num + 1,delayF=delay;
//==========↓↓=2=↓↓==========
if (pid == 0){
while (delay > 0) {
srand(time(NULL));
printf(" ⊙ <P%d> <%4d> : %d",p,getpid(),delay--);
if(delayF==delay+1){printf(" == First\n");}
else{printf("\n");}
sleep(1);}
exit(p);
}
//==========↑↑=2=↑↑==========
}

2014/5/1 21:17
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.