2010-05-01 3 views
0

J'étudie ce code de quelque livre:Passage de données à multiples threads

#include <pthread.h> 
#include <stdio.h> 

/* Parameters to print_function. */ 
struct char_print_parms { 
    /* The character to print. */ 
    char character; 
    /* The number of times to print it. */ 
    int count; 
}; 

/* Prints a number of characters to stderr, as given by PARAMETERS, 
    which is a pointer to a struct char_print_parms. */ 
void* char_print(void* parameters) { 
    /* Cast the cookie pointer to the right type. */ 
    struct char_print_parms* p = (struct char_print_parms*) parameters; 
    int i; 
    for (i = 0; i < p->count; ++i) 
     fputc(p->character, stderr); 
    return NULL; 
} 

/* The main program. */ 
int main() { 
    pthread_t thread1_id; 

    pthread_t thread2_id; 
    struct char_print_parms thread1_args; 
    struct char_print_parms thread2_args; 
    /* Create a new thread to print 30,000 ’x’s. */ 
    thread1_args.character = 'x'; 
    thread1_args.count = 30000; 
    pthread_create(&thread1_id, NULL, &char_print, &thread1_args); 
    /* Create a new thread to print 20,000 o’s. */ 
    thread2_args.character = 'o'; 
    thread2_args.count = 20000; 
    pthread_create(&thread2_id, NULL, &char_print, &thread2_args); 
    usleep(20); 
    return 0; 
} 

après l'exécution de ce code, je vois un résultat différent à chaque fois. et un certain temps résultat corrompu. Quel est le problème et quelle est la bonne façon de le faire?

+0

Que dit "un livre" à ce propos? –

Répondre

0

Ajouter:

pthread_join(thread1_id, NULL); 
pthread_join(thread2_id, NULL); 

au fond de votre code, avant le retour dans le principal. Votre prosess se termine avant que vos discussions puissent se terminer. Un sommeil de 20 microsecondes ne suffit pas pour que vos discussions soient terminées. Plus sûr d'attendre que les threads reviennent.

Questions connexes