Estoy tratando de escribir un programa de subprocesos múltiples, el número de subprocesos basados en la entrada de la línea de comandos, por lo que no puedo codificar los subprocesos preestablecidos. ¿Es esta una forma válida de hacerlo?Cómo generar n hilos?
int threads = 5; // (dynamic, not hard-coded)
int i = 0;
pthread_t * thread = malloc(sizeof(pthread_t)*threads);
for (i = 0; i < threads; i++) {
pthread_t foobar;
thread[i] = foobar; // will this cause a conflict?
}
for (i = 0; i < threads; i++) {
int ret = pthread_create(&thread[i], NULL, (void *)&foobar_function, NULL);
if(ret != 0) {
printf ("Create pthread error!\n");
exit (1);
}
}
aquí está mi resultado de las modificaciones se sugiere a continuación. Parece que funciona bien.
int threads = 5;
int i;
pthread_t * thread = malloc(sizeof(pthread_t)*threads);
for (i = 0; i < threads; i++) {
int ret = pthread_create(&thread[i], NULL, &foobar_function, NULL);
if(ret != 0) {
printf ("Create pthread error!\n");
exit (1);
}
// pthread_join(thread[i], NULL); // don't actually want this here :)
}
sleep(1); // main() will probably finish before your threads do,
free(thread); // so we'll sleep for illustrative purposes
no se puede simplemente asignar un entero a una cadena en el bit 'int threads = argv [3]'. Tienes que usar 'atoi' o sscanf –
gracias, tienes razón. fijo. –
Bueno, con 'pthread_join()' como está, deberás crear el hilo y esperar a que termine antes de generar el siguiente. Así que, de hecho, serás casi un único hilo aquí :) –