何をすべきか。

何をすべきか。

スレッドを正しい順序で出力する際に​​はいくつかの問題があります。私のプログラムには少なくとも2つのパラメータが必要です。 .プログラムの出力はスレッド番号(インデックス)と2番目のパラメータのメッセージですが、スレッドは最初のパラメータの時間に基づいてソートする必要があります。 。

#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 と呼びます。

何をすべきか。

thread_main.cにさまざまな遅延を配置しますprintf。 (より良い名前を指定してください)。その後、メッセージとIDをスレッドに渡す必要があります。

バラより手動これを行う方法の例。メモがtinfoスレッドに渡されています。

スレッドごとに1つずつ、異なるメッセージとIDを使用する3つのルーチンから始めます。これがうまくいったら、起動時に情報を渡す方法を探し始めます。

関連情報