C

pthread調度和輸出的問題

  • April 5, 2020

我在以正確的順序輸出我的執行緒時遇到了一些問題。我的程序需要至少接受 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。當這個工作開始探索如何在啟動時將資訊傳遞給他們。

引用自:https://unix.stackexchange.com/questions/578085