【问题标题】:Create an Int Array from Int Array Address从 Int 数组地址创建一个 Int 数组
【发布时间】:2015-10-12 00:16:37
【问题描述】:

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

void* sort(void* param)

如何获取参数,使其可以用作 int 数组局部变量?

还要返回排序后的数组,我只需在最后一行执行return array

然后做类似int sorted_array[] = pthread_create(&tid, &attr, sort, &un_sorted_array) 的事情来捕捉它?

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

【问题讨论】:

  • 我试着理解那个链接,但我还是卡住了。
  • 对于初学者,您应该发布整个代码。
  • void* merge(void* arg) {int *arg_ptr[] = (int*) arg; int arr[] = *arg_ptr;} 给了我一个无效的初始化错误
  • 试试void* merge(void* arg) { int *arg_ptr = (int*) arg; }。要获得结果,您需要致电pthread_join

标签: c arrays multithreading pointers pthreads


【解决方案1】:

要访问您的数组,您可以像这样将void 指针转换为int 指针

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

要返回数组,您只需这样做

return a;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2016-11-05
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多