gpt4 book ai didi

c - 将数据传递到多线程

转载 作者:行者123 更新时间:2023-11-30 18:09:08 25 4
gpt4 key购买 nike

我从某本书中研究了这段代码:

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

运行此代码后,我每次都会看到不同的结果。有时结果会损坏。有什么问题以及正确的方法是什么?

最佳答案

添加:

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

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

关于c - 将数据传递到多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2749520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com