Что делать.

Что делать.

У меня возникли некоторые проблемы с выводом потоков в правильном порядке. Моя программа должна принимать как минимум 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 это_последнее 100 это_первое 200 это_среднее

Вывод должен быть таким:

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.

Что делать.

Поместите изменяющуюся задержку и printfв thread_main. (И дайте ему лучшее имя). Затем вам нужно передать сообщение и идентификатор потоку.

Видетьруководстводля примера того, как это сделать. Примечание tinfoпередается в поток.

Я бы начал с 3 процедур, по одной на каждый поток, с разными сообщениями и идентификаторами. Когда это заработает, начните изучать, как передавать им информацию при запуске.

Связанный контент