【发布时间】:2020-11-27 13:57:19
【问题描述】:
所以我在下面有一个程序 prime.c,我应该通过让每个素数调用一个线程并这样调用新程序 primeThreads.c 来加速它:
> gcc –o prime prime.c –lm
> time ./prime
>gcc –o primeThreads primeThreads.c –lm –lpthread
>time ./primeThread
我只是有点困惑如何做到这一点?我应该在 primeThreads.c 中创建线程然后调用它吗?另外我如何从 prime.c 调用这个文件?我尝试在下面的 prime.c 中创建线程并
/tmp/cc8Lo90g.o: In function `main':
prime.c:(.text+0xa7): undefined reference to `pthread_create'
prime.c:(.text+0xb8): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
prime.c
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <pthread.h>
void *prime(void*);
int main()
{
int i;
pthread_t t1;
long int number[10] = {5011*5009, 1293961, 1293967, 5021*4241, 4723*5009,
5011*5021, 1299173, 1160807, 4241*4723, 1161829};
for (i = 0; i < 10; i++) {
prime(number+i);
pthread_create(&t1, NULL, prime, " ");
pthread_join(t1, NULL);
}
return(0);
}
void *prime(void *n) {
int i;
long int num = *((long int *)n);
int max = (int) sqrt(num);
for (i = 2; i <= max; i++) {
usleep(1000);
if (num % i == 0) {
printf("%ld is not prime\n", num);
return NULL;
}
}
printf("%ld is prime\n", num);
}
【问题讨论】:
标签: c multithreading compiler-errors pthreads primes