[問題] pthread的問題

看板C_and_CPP作者 (WZXM)時間15年前 (2010/08/03 16:33), 編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/1
void* tfunction(void* input) { printf("Thread %d is executing\n", *((int*)input)); pthread_exit((int*)1); } int main(int argc, char** argv) { int error1; int error2; int input1=1; int input2=2; pthread_t thread1; pthread_t thread2; error1=pthread_create(&thread1, NULL, tfunction, (void*)&input1); error2=pthread_create(&thread2, NULL, tfunction, (void*)&input2); if(error1!=0||error2!=0) printf("Error\n"); return 0; } 以上code成功compile後 應該是要printf出 "Thread 1 is executing" (input1的值) 可是結果上面那個數字都會跳來跳去 ex. Thread -801803032 is executing. 有時候也會是1 請問這樣的code發生什麼問題? 我知道會有優先權的問題 應該要加入pthread_join等某一個thread做完後另一個再做 但是我就是不明白這樣寫數字為什麼會亂跳 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.154.171

08/03 16:53, , 1F
可是我怎樣都不覺得會印出 Thread 0 is executing。
08/03 16:53, 1F

08/03 16:53, , 2F
你是用什麼根據判斷出 0 這個數字的?
08/03 16:53, 2F

08/03 16:54, , 3F
WHY?
08/03 16:54, 3F

08/03 16:54, , 4F
不是傳input1這個參數指標進去tfunction嗎?
08/03 16:54, 4F

08/03 16:55, , 5F
int input1=1; <--- 你的 input1 是 1 。
08/03 16:55, 5F

08/03 16:56, , 6F
阿對啦 是1 我沒有看清楚 抱歉
08/03 16:56, 6F
※ 編輯: WWWZZZXXXMMM 來自: 140.112.154.171 (08/03 16:57)

08/03 17:02, , 7F
你怎麼確定main thread的堆疊不會在child thread run前摧毀
08/03 17:02, 7F

08/03 17:04, , 8F
你難道不覺得開了兩個 thread 卻指只印了一行很奇怪嗎?
08/03 17:04, 8F

08/03 17:06, , 9F
我知道只會印一行 但是我的疑問在於數字為何不會是1
08/03 17:06, 9F

08/03 17:08, , 10F
不該只會印一行的... -.-
08/03 17:08, 10F

08/03 17:11, , 11F
但我怎麼跑都是指印一行出來@@
08/03 17:11, 11F
在下面加上這兩行就會正常印出結果 pthread_join(thread1, (void*)&return1); pthread_join(thread2, (void*)&return2); 但還是令人百思不解我發文的這個疑問點如何解釋 ※ 編輯: WWWZZZXXXMMM 來自: 140.112.154.171 (08/03 17:13)

08/03 17:39, , 12F
你發文的疑問點,關鍵在 7F 說的。
08/03 17:39, 12F
文章代碼(AID): #1CLzGzJi (C_and_CPP)