![](/img/trans.png)
[英]Why do I can't get window size in Linux C program while I'm using minicom?
[英]Why do I get these results in this small program with threads in C (LINUX)?
我有一個小程序,我在OS課程的考試科目中找到。
void * func (void * p) {
int n = p;
printf("%d \n",n);
return NULL;
}
int main() {
int i;
pthread_t t[3];
for(i=0; i<3; i+=1)
pthread_create(&t[i] ,NULL, func, (void*)i);
return 0;
}
當我運行它時,我得到以下結果(每個數字后面有一個新行):
第一輪:0 0
第二輪:1 0 2 2
第3輪:0 1 1
當我只創建3個線程時,為什么它會打印4位數。 它怎么打印重復?
該代碼在Ubuntu中使用gcc編譯。
在退出main()之前,不要加入線程。 將以下內容添加到main()
:
for(i=0; i<3; i+=1)
pthread_join(t[i], NULL);
當線程在程序退出時繼續執行時,不加入線程會導致未定義的行為 。 未定義的行為可以自由執行任何操作,包括打印重復項。
想一想,傳遞給線程的void*
存儲在某個地方,一旦你提前退出main,你可能會破壞數據傳遞給線程,此時它可以接受任何值(包括重復的值) )。 但這甚至不值得嘗試解釋,因為它是未定義的行為 。
從main
函數return
相當於對exit
的調用並終止整個過程。 所以它或多或少隨機的輸出通過你的屏幕。 您應該執行以下操作之一
main
的末尾調用pthread_exit
而不是調用exit
或使用return
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.