看板 C_and_CPP 關於我們 聯絡資訊
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
tinlans:可是我怎樣都不覺得會印出 Thread 0 is executing。 08/03 16:53
tinlans:你是用什麼根據判斷出 0 這個數字的? 08/03 16:53
WWWZZZXXXMMM:WHY? 08/03 16:54
WWWZZZXXXMMM:不是傳input1這個參數指標進去tfunction嗎? 08/03 16:54
tinlans:int input1=1; <--- 你的 input1 是 1 。 08/03 16:55
WWWZZZXXXMMM:阿對啦 是1 我沒有看清楚 抱歉 08/03 16:56
※ 編輯: WWWZZZXXXMMM 來自: 140.112.154.171 (08/03 16:57)
sunneo:你怎麼確定main thread的堆疊不會在child thread run前摧毀 08/03 17:02
tinlans:你難道不覺得開了兩個 thread 卻指只印了一行很奇怪嗎? 08/03 17:04
WWWZZZXXXMMM:我知道只會印一行 但是我的疑問在於數字為何不會是1 08/03 17:06
sunneo:不該只會印一行的... -.- 08/03 17:08
WWWZZZXXXMMM:但我怎麼跑都是指印一行出來@@ 08/03 17:11
在下面加上這兩行就會正常印出結果 pthread_join(thread1, (void*)&return1); pthread_join(thread2, (void*)&return2); 但還是令人百思不解我發文的這個疑問點如何解釋 ※ 編輯: WWWZZZXXXMMM 來自: 140.112.154.171 (08/03 17:13)
tinlans:你發文的疑問點,關鍵在 7F 說的。 08/03 17:39