該怎麼辦。

該怎麼辦。

我在以正確的順序輸出線程時遇到一些問題。我的程式需要至少 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。

該怎麼辦。

將變化的延遲放在printfthread_main.c 中。 (並給它一個更好的名字)。然後,您必須將訊息和 id 傳遞給線程。

手動的有關如何操作的範例。注意tinfo正在傳遞給線程。

我將從 3 個例程開始,每個線程一個例程,並具有不同的訊息和 ID。當此工作正常時,開始探索如何在啟動時向他們傳遞訊息。

相關內容