[問題] 想請問一下thread的關念,有程式例子
遇到的問題: (題意請描述清楚)
在OS課本中好像提到,Multi-thread是很多條同時進行,
我寫了一個code,會產生兩個thread,
thread_return_1=pthread_create(&tid_1,&attr,test,item);
thread_return=pthread_create(&tid,&attr,runner,item);
分別做以下的事
void *runner(void *param)
{
unsigned int tid=pthread_self();
int i;
printf("A,run!\n");
for(i=0,sum=0;i<=*(int*)param;i++)
{
sum+=i*i;
printf("==%2d==\n",sum);
}
printf("I'am thread,my tid is %u\n",tid);
printf("A,finish!\n");
pthread_exit(0);
}
void *test(void *param)
{
unsigned int tid=pthread_self();
int temp,i;
printf("B,run!\n");
for(i=0,sum_1=0;i<=*(int*)param;i++)
{
sum_1+=i*i;
printf("__%2d__\n",sum_1);
}
printf("I'am thread,my tid is %u\n",tid);
printf("B,finish!\n");
pthread_exit(0);
}
當main產生完thread後,會跑下面
do
{
printf("parent_thread,waiting....\n");
}
while(pthread_join(tid_1,NULL)!=0 || pthread_join(tid,NULL)!=0);
希望得到的正確結果:
我目前的觀念是,thread都是同步在進行,
假如input是5:
我以為會跑出
B,run!
__ 1__
A,run!
__ 5__
parent_thread,waiting....
== 1==
__14__
== 5==
==14==
parent_thread,waiting....
__30__
==30==
parent_thread,waiting....
==55==
A,finish!
__55__
B,finish!
parent_thread,waiting....
這樣交錯的結果,但是實際上跑出來是:
B,run!
A,run!
__ 1__
__ 5__
__14__
__30__
__55__
B,finish!
== 1==
== 5==
==14==
==30==
==55==
A,finish!
parent_thread,waiting....
每次跑的「A,run!」、「B,run!」、「parent_thread,waiting....」
的位子都不一定
但是兩個thread的printf,都會連在一起,並沒有交錯,
請問是我觀念錯了嗎?
不好意思,謝謝各位。
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
g++ Linux
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.170.205.201
→
11/18 02:23, , 1F
11/18 02:23, 1F
→
11/18 02:26, , 2F
11/18 02:26, 2F
→
11/18 02:28, , 3F
11/18 02:28, 3F
→
11/18 19:05, , 4F
11/18 19:05, 4F
※ 編輯: mine1988 來自: 140.134.27.89 (11/18 19:23)
推
11/18 21:44, , 5F
11/18 21:44, 5F
→
11/18 21:44, , 6F
11/18 21:44, 6F
→
11/18 21:44, , 7F
11/18 21:44, 7F
今天有問了一下學長,
學長說要達到這樣的話,兩個thread必需同時搶到CPU才可以,
因為這個只是小程式,搞不好A thread做完的時候,B thread還在排班,
所以很難達到同時印這個條件,
如果有錯再請大家補充,
謝謝大家。
※ 編輯: mine1988 來自: 118.170.206.248 (11/19 00:43)
推
11/19 03:00, , 8F
11/19 03:00, 8F