gpt4 book ai didi

在 for 循环中创建 C pthread 结构体

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

我目前正在尝试在 for 循环期间创建新的结构对象。这些被传递给一个新函数来处理它们。

int start_i = 0;
for(int t = 0 ; t < t_max ; t++) {
// Arguments for the threads.
struct arguments* arguments1 = malloc(sizeof(struct arguments));
arguments1->old_array = old_array;
arguments1->current_array = current_array;
arguments1->next_array = next_array;
arguments1->i_start = start_i;

if (t == t_max - 1) {
arguments1->i_end = i_max;
}
else {
arguments1->i_end = start_i + i_size - 1;
start_i += i_size;
}

printf("%d\n", &arguments1);

pthread_create(&thread_ids[t], NULL, &help, (void*)arguments1);
}

如您所见,我正在使用 pthreads。问题是,并不是所有对象都是新的,它们只是覆盖旧对象,因为我打印的地址位置是相同的。我需要对象是新的,否则不同的线程将处理共享数据。

最佳答案

变量 arguments1 是一个指针,其地址 (&arguments1) 在您提供的代码中不会发生变化。但是,每次调用 malloc 时,它指向的内容都会发生变化。由于您将 arguments1 (不是 &arguments1 - 它的地址)作为参数传递给 pthread_create,您将正确的东西(指向新分配的结构的指针)传递给线程函数。要查看循环中不断变化的值,请使用:

printf("%p\n", arguments1);

请注意,%p 是打印指针值的正确方法,而不是 %d

关于在 for 循环中创建 C pthread 结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53253694/

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