我刚开始使用pthreads
学习并行编程。因此,出于学习目的,我平行地尝试了两个整数数组的总和。我已声明struct construct
有三个数组变量a
,b
和c
。我想添加a
,b
并将结果存储在c
。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define MAX 6
struct data {
int a[MAX];
int b[MAX];
int c[MAX];
};
void *addition(void *index) {
struct data *d1 = (struct data *)index;
printf("value of d1 structure=%d\n", d1->a[0]);
}
int main() {
int i, j, t;
struct data *item = NULL;
pthread_t threads[MAX];
item = (struct data *)malloc(sizeof *item);
printf("enter the value for arrray a\n");
for (i = 0; i < MAX; i++) {
scanf("%d", &item->a[i]);
}
printf("enter the value of array b\n");
for (j = 0; j < MAX; j++) {
scanf("%d", &item->b[j]);
}
for (t = 0; t < MAX; t++) {
pthread_create(&threads[t], NULL, addition, (void *)&item);
}
}
在这里,到目前为止,我还没有在函数addition()
中添加数组,因为在pthread_create()
中,当我在structure
的帮助下传递三个参数时,函数添加变量a
和b
未被复制。打印a
给了我垃圾价值。任何人都可以帮助我如何将structure
变量复制到pthread_create()
调用的函数参数。
答案 0 :(得分:3)
pthread_create
功能:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
请注意(*arg)
是指向arg
的指针。
您已创建struct data *item
作为指针,然后您传递其地址,即指针指针。
pthread_create(&threads[t], NULL, addition, (void *)&item);
将通话更改为
pthread_create(&threads[t], NULL, addition, (void *)item).