무엇을 해야할지.

무엇을 해야할지.

스레드를 올바른 순서로 출력하는 데 몇 가지 문제가 있습니다. 내 프로그램에는 최소한 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이라고 합니다.

무엇을 해야할지.

thread_main.c에 다양한 지연을 배치합니다 printf. (더 나은 이름을 지정하십시오). 그런 다음 메시지와 ID를 스레드에 전달해야 합니다.

바라보다수동이를 수행하는 방법의 예. 메모가 tinfo스레드로 전달되고 있습니다.

스레드당 하나씩, 서로 다른 메시지와 ID를 사용하는 3개의 루틴부터 시작하겠습니다. 이것이 제대로 작동하면 시작 시 정보를 전달하는 방법을 탐색하기 시작하십시오.

관련 정보