Qué hacer.

Qué hacer.

Tengo algunos problemas para generar mis hilos en el orden correcto. Mi programa necesita tomar al menos 2 parámetros (podrían ser más, pero siempre 2 a la vez porque uno es un número entero (cuántos segundos espera el hilo) y el otro es char* (solo un mensaje normal)). La salida del programa es el número de hilo (índice) y el mensaje del segundo parámetro, pero los hilos deben ordenarse según el tiempo que tuvieron desde el primer parámetro. El hilo principal debe esperar a todos los demás hilos. Habrá un máximo de 10 hilos.

#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;
}

Este es mi código. Cuando ingreso los parámetros para el código:

300 esto_es_el_último 100 esto_es_el_primero 200 esto_es_el_medio

La salida debería ser así:

Thread 2 : this_is_first
Thread 3 : this_is_middle
Thread 1 : this_is_last

Pero con mi código me sale esto:

Thread 1 : this_is_last
Thread 2 : this_is_first
Thread 3 : this_is_middle

Soy nuevo en los hilos y realmente no sé cómo solucionar este problema.

Respuesta1

De mirar el código. No hay salida dentro de los hilos. Por lo tanto, el subproceso no hace nada. Puedes eliminar create_thread y funcionará.exactamentela misma cosa.

La salida estará en orden secuencial. Con tiempos variables (según los parámetros pares).

Además, cada hilo se llama thread_main.

Qué hacer.

Coloque el retraso variable y el printfen thread_main. (Y dale un nombre mejor). Luego tienes que pasar el mensaje y la identificación al hilo.

Vermanualpara ver un ejemplo de cómo hacerlo. Nota tinfoque se pasa al hilo.

Yo empezaría por tener 3 rutinas, una para cada hilo, con diferentes mensajes e ID. Cuando esto funcione, comience a explorar cómo pasarles información al inicio.

información relacionada