从Int Array Address创建一个Int数组

时间:2015-10-12 00:16:38

标签: c arrays multithreading pointers pthreads

我目前正在通过C中的线程工作,我目前仍然坚持在创建线程时使用我的一个参数(一个要排序的数组)作为要使用的数组。举个例子:

void* sort(void* param)

如何获取param以便它可以用作int数组局部变量?

同样要返回已排序的数组,我只会在最后一行return array上进行操作,

并执行int sorted_array[] = pthread_create(&tid, &attr, sort, &un_sorted_array)之类的操作来捕捉它?

我是C的新手以获得任何帮助,我们将不胜感激? Using void pointer to an array这里的解决方案仍然给我一个无效的初始化错误。

1 个答案:

答案 0 :(得分:0)

要访问您的数组,您可以将void指针转换为int指针,如此

void* merge(void* arg) {
    int* a = (int*) arg;
}

要返回数组,只需执行

return a;

其中aint*。要从主线程获得结果,请使用指向某些int*的第二个参数调用pthread_join

pthread_join(tid, (void*)&b);

其中bint* b;

要将参数传递给线程,您需要获取数组的第一个元素的地址(它与此数组的指针相同)。这样做

pthread_create(&tid, NULL, merge, (void*)&a[0]);

其中a是数组int a[N];

请参阅pthread的完整示例,其中int数组作为参数,int*作为返回值。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define N 10

void* merge(void* arg) {
    int* arr = (int*) arg;
    int* res = malloc(N * sizeof(int));
    for(int i = 0; i < N; ++i) {
            res[i] = arr[i] + 1;
    }
    return res;
}

int main() {
    pthread_t tid;

    int a[N];
    int* b;
    for(int i = 0; i < N; ++i) {
            a[i] = i;
    }

    printf("a = [");
    for(int i = 0; i < N; ++i) {
            printf("%3d ", a[i]);
    }
    printf("]\n");

    pthread_create(&tid, NULL, merge, (void*)&a[0]);
    pthread_join(tid, (void*)&b);

    printf("b = [");
    for(int i = 0; i < N; ++i) {
            printf("%3d ", b[i]);
    }
    printf("]\n");

    return 0;
}