【发布时间】:2019-01-24 17:57:30
【问题描述】:
我的项目有问题,它应该使用线程将每一行相加,然后将所有内容相加,但我收到一个错误,提示 lvalue required as unary '&" 操作数
pthread_create(&tid, NULL, &sum_line(0), NULL);
我尝试了一些方法,但无法解决,有什么想法吗?谢谢
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
static void * sum_line(int nr_line);
int Sum;
int A[4][4];
int main() {
pthread_t tid;
Sum=0;
printf("\nOrig thread tid(%d) Sum=%d", pthread_self(), Sum);
pthread_create(&tid, NULL, &sum_line(0), NULL);
printf("\nChild thread was created tid(%d)", tid);
pthread_join(tid,NULL);
printf("\nOrig thread tid(%d)-->Child thread ended tid(%d) Sum=%d",pthread_self(), tid, Sum);
printf("\n");
}
static void * sum_line(int nr_line) {
int i;
for(i=0;i<4;i++) {
Sum=Sum+A[i];
printf("\nChild thread tid(%d), i=%d, Sum=%d",pthread_self(),i,Sum);
sleep(2);
}
printf("\nChild thread tid(%d)--> ending", pthread_self());
}
【问题讨论】:
-
&sum_line(0)- 这应该给什么? -
void * sum_line()缺少return语句。 -
pthread_create(&tid, NULL, sum_line, (void*)0),这将导致 sum_line 被调用,下一个参数将是同一函数的第一个参数。可能最好将您的int nr_line参数也声明为void*,然后将其转换为该值。