我目前正在通过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这里的解决方案仍然给我一个无效的初始化错误。
答案 0 :(得分:0)
要访问您的数组,您可以将void
指针转换为int
指针,如此
void* merge(void* arg) {
int* a = (int*) arg;
}
要返回数组,只需执行
return a;
其中a
为int*
。要从主线程获得结果,请使用指向某些int*
的第二个参数调用pthread_join
。
pthread_join(tid, (void*)&b);
其中b
为int* 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;
}