2010-05-01 33 views
0

我一些書研究這個代碼:運行此代碼後將數據傳遞到多線程技術

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

,我看到不同的結果每次。和一些時間損壞的結果。什麼是錯誤的,以及正確的方法是什麼?

+0

「有些書」對此有何評論? – 2010-05-01 10:09:11

回答

0

地址:

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

你的代碼的底部,在main函數的返回之前。在您的主題完成之前,您的發言結束。 20微秒的睡眠不足以讓你的線程完成執行。更安全地等待線程返回。