【发布时间】:2017-04-14 11:28:24
【问题描述】:
我有一个struct
struct dotData{
long x;
long y;
};
我尝试将其传递给多个threads
void *find_z(void *thisdot)
{
long z;
struct dotData *data;
*data = *((struct dotData*)(thisdot));
z = data.x + data.y;
printf("Here's our dot! %ld * %ld = %ld \n", data.x, data.y, z);
pthread_exit(NULL);
}
从main() 创建一个结构thisdot,每次更改其元素x 和y 时,它都会作为参数传递给find_z
int main()
{
.
.
.
struct dotData thisdot;
int NUM_THREADS;
NUM_THREADS = N*M;
pthread_t threads[NUM_THREADS];
int i, j;
for(i = 0; i < M; i++){
for (j = 0; j < N; j++) {
thisdot.x = x_dotBegin + x_interval*j;
thisdot.y = y_dotBegin + y_interval*i;
pthread_create(&threads[NUM_THREADS], NULL, find_z, &thisdot);
}
}
pthread_exit(NULL);
}
但是,在编译过程中,z = data.x + data.y; 出现错误
error: request for member ‘x’ in something not a structure or union|
error: request for member ‘y’ in something not a structure or union|
如何正确地将这个结构传递给线程?
【问题讨论】:
-
data->x和data->y但您对*data = ...有未定义的行为 -
编译器会准确地告诉您问题所在。数据不是结构,也不是联合。数据是一个指针。像指针一样处理它。
标签: c multithreading struct pthreads