我在以正確的順序輸出線程時遇到一些問題。我的程式需要至少 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
我是線程新手,我真的不知道如何解決這個問題。
答案1
從看代碼來看。線程內沒有輸出。因此線什麼也不做。你可以刪除create_thread,它就可以了確切地一樣的東西。
輸出將按順序排列。不同的時間(根據偶數參數)。
此外,每個執行緒都稱為 thread_main。
該怎麼辦。
將變化的延遲放在printf
thread_main.c 中。 (並給它一個更好的名字)。然後,您必須將訊息和 id 傳遞給線程。
看手動的有關如何操作的範例。注意tinfo
正在傳遞給線程。
我將從 3 個例程開始,每個線程一個例程,並具有不同的訊息和 ID。當此工作正常時,開始探索如何在啟動時向他們傳遞訊息。