将数据传递给多线程

时间:2010-05-01 10:06:26

标签: c multithreading

我从一些书中学习这段代码:

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

运行此代码后,每次都会看到不同的结果。并且有些时间损坏了结果。什么是错的,以及正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

添加:

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

到代码的底部,在main之前返回。你的线程在线程完成之前就结束了。 20微秒的睡眠不足以让您的线程完成执行。更安全等待线程返回。