C
pthread調度和輸出的問題
我在以正確的順序輸出我的執行緒時遇到了一些問題。我的程序需要至少接受 2 個參數(可能更多,但每次總是 2 個,因為一個是整數(執行緒等待多少秒),另一個是 char*(只是一條正常消息))。程序的輸出是執行緒號(索引)和第二個參數的消息,但是執行緒需要根據它們從第一個參數得到的時間進行排序。主執行緒需要等待所有其他執行緒。最多有 10 個執行緒。
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> void* thread_main(void* arg){ sleep(1); return NULL; } int main(int argc, char** argv){ pthread_t tid[10]; int s; int index=0; for(int i=1;i<argc;i+=2){ int param1= atoi(argv[i]); char* param2= argv[i+1]; s=pthread_create(&tid[index],NULL,thread_main,NULL); usleep(param1*1000); printf("Thread %d : %s\n",index+1,param2); index++; } for(int i=0;i<index+1;i++){ s=pthread_join(tid[i],NULL); } return 0; }
這是我的程式碼。當我輸入程式碼的參數時:
300 this_is_last 100 this_is_first 200 this_is_middle
輸出應該是這樣的:
Thread 2 : this_is_first Thread 3 : this_is_middle Thread 1 : this_is_last
但是通過我的程式碼,我得到了這個:
Thread 1 : this_is_last Thread 2 : this_is_first Thread 3 : this_is_middle
我是執行緒新手,我真的不知道如何解決這個問題。
從看程式碼。執行緒內沒有輸出。因此,執行緒什麼也不做。您可以刪除 create_thread,它會做同樣的事情。
輸出將按順序排列。隨著時間的變化(根據偶數參數)。
每個執行緒也稱為thread_main。
該怎麼辦。
把變化的延遲,和
printf
在thread_main。(並給它一個更好的名字)。然後,您必須將消息和 id 傳遞給執行緒。有關如何執行此操作的範例,請參見手冊。注意
tinfo
被傳遞給執行緒。我將從擁有 3 個常式開始,每個執行緒一個,具有不同的消息和 ID。當這個工作開始探索如何在啟動時將資訊傳遞給他們。