在for循环中创建C pthread结构

时间:2018-11-11 22:02:37

标签: c struct pthreads malloc

我目前正在尝试在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。问题在于,不是所有对象都是新对象,而是它们覆盖了旧对象,因为我打印的地址位置是相同的。我需要对象是新的,因为否则不同的线程将对共享数据起作用。

1 个答案:

答案 0 :(得分:3)

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

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

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