무엇을 해야할지.

무엇을 해야할지.

스레드를 올바른 순서로 출력하는 데 몇 가지 문제가 있습니다. 내 프로그램은 최소한 2개의 매개변수를 취해야 합니다(더 많을 수도 있지만, 하나는 정수(스레드가 몇 초 동안 대기하는지)이고 다른 하나는 char*(그냥 일반 메시지)이기 때문에 항상 한 번에 2개입니다). 프로그램의 출력은 스레드 번호(인덱스)와 두 번째 매개변수의 메시지이지만 스레드는 첫 번째 매개변수의 시간을 기준으로 정렬되어야 합니다. 메인 스레드는 다른 모든 스레드를 기다려야 합니다. 최대 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에 넣습니다. (그리고 더 나은 이름을 지정하십시오). 그런 다음 메시지와 ID를 스레드에 전달해야 합니다.

보다수동이를 수행하는 방법에 대한 예입니다. tinfo스레드에 메모가 전달됩니다.

먼저 각 스레드마다 하나씩, 메시지와 ID가 서로 다른 3개의 루틴을 사용하겠습니다. 이것이 작동하면 시작 시 정보를 전달하는 방법을 탐색하기 시작합니다.

관련 정보