Re: [理工] [OS]-關於Fork()
※ 引述《yesa315 (XD)》之銘言:
: #include<pthread.h>
: #include<stdio.h>
: int value = 0;
: void *runner(void *param); /*the thread*/
: int main(int argc, char *argv[])
: {
: int pid;
: pthread_t tid;
: pthread_attr_t attr;
: pid=fork();
Forking 是把 process 複製一份成為 child
Threading 是共用同一個 process
此題是先 forking 再 threading
所以,
_
/ parent process(P)
P => fork--
\_child process(P的複製)=>threading--threads共用child data
: if(pid == 0) /*child process*/
: {
: pthread_attr_init(&attr);
: pthread_creat(&tid,&attr,runner,NULL);
: pthread_join(tid,NULL);
: printf("CHILD value = %d",value); /*LINE C*/
CHILD value 經過runner運算得 5
: }
: else if(pid > 0)
: {
: wait(NULL);
: printf("PARENT : value = %d",value); /*LINE P*/
PARENT value 原封不動為 0
: }
: }
: void *runner(void *param)
: {
: value = 5;
: pthread_exit(0);
: }
: 求解P行跟C行的value值
: 答案 : P=0 , C=5
: 為什麼?? 能否告訴我程式大概的執行流程
: 感謝
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.198.131.51
※ 編輯: svanavs 來自: 60.198.131.51 (08/18 21:16)
推
08/18 23:03, , 1F
08/18 23:03, 1F
→
08/18 23:03, , 2F
08/18 23:03, 2F
→
08/18 23:04, , 3F
08/18 23:04, 3F
→
08/18 23:05, , 4F
08/18 23:05, 4F
→
08/18 23:06, , 5F
08/18 23:06, 5F
→
08/18 23:10, , 6F
08/18 23:10, 6F
※ 編輯: svanavs 來自: 60.198.131.51 (08/18 23:11)
推
08/18 23:55, , 7F
08/18 23:55, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):