Comment spawn n threads?

Je suis en train d'écrire un programme multi-threadé, le nombre de threads basé sur la ligne de commande, et donc je ne peux pas coder en dur pré-déclaré fils. Est-ce là une façon de faire cela?

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

Voici mon résultat de modifications suggérées ci-dessous. Semble très bien fonctionner.

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
vous ne pouvez pas affecter un entier à une chaîne de caractères dans le int threads = argv[3] peu. Vous devez utiliser atoi ou sscanf
merci, vous avez raison. fixe.
Eh bien, avec pthread_join() d'être là où il est, vous devez créer le fil, puis attendez la fin avant le frai de la suivante. Donc, en fait, vous serez quasi mono-thread ici:)
Quand je le lance sans le rejoindre, il ne pense pas qu'il exécute la fonction... (j'ai fait foobar_function il suffit d'imprimer une ligne rapide de texte). Ai-je raté une étape? .. MODIFIER en Fait, je suppose que c'est le travail.. parfois, il imprime le texte, mais la plupart du temps ce n'est pas :P.

OriginalL'auteur Brian D | 2011-02-10