【发布时间】:2016-09-15 03:16:21
【问题描述】:
所以,我正在做一些家庭作业,但我被困在了这个环节。尝试调用 pthread_join 时遇到的错误。
我尝试了不同的解决方案,包括创建一个 void 指针以发送到 pthread_join 调用。
这是我的代码:
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <semaphore.h>
#include <time.h>
#include <pthread.h>
#define NTHREADS 5
#define NVALORES 1000
#define NUMBER_PROCURADO 890
void * run(void *arg);
void fillVector();
int vetor[NVALORES];
int main(){
int i, vetor2[NTHREADS];
pthread_t threads[NTHREADS];
fillVector();
for (i = 0; i < NTHREADS; i++){
vetor2[i]=i;
threads[i]= pthread_create(&threads[i], NULL, run, &vetor2[i]);
}
for (i = 0; i < NTHREADS; i++){
pthread_join(threads[i], NULL);
}
return 0;
}
void * run(void * arg){
int *pos = (int *) arg;
int i;
for (i = NVALORES/NTHREADS*(*pos); i < NVALORES/NTHREADS*((*pos)+1); i++){
if(vetor[i]==NUMBER_PROCURADO){
printf("Found it! Position: %d\n",i);
}
pthread_exit( (void*)pos);
}
pthread_exit( (void*)NULL);
}
void fillVector(){
int i;
for (i = 0; i < NVALORES; i++){
vetor[i] = i+1;
}
}
【问题讨论】:
-
NVALORES未定义。 -
其实已经定义好了,只是这里没有包含。
-
这可能很重要,如果不是 Fred 回答的真正问题。
-
我只是说它是定义的,我只是没有将整个代码复制粘贴到这里。无论哪种方式,弗雷德的回答都为我解决了这个问题。还是谢谢。
-
从技术上讲,这个问题可以作为题外话关闭,因为它不包含MCVE。它不完整,因为(除其他外)
NVALORES未定义。
标签: c pointers segmentation-fault pthreads