Не работает многопоточность в С
Этот код находит сумму всех простых чисел, меньших n, но в однопоточном режиме он работает быстрее, чем в многопоточном. В чём проблема?
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include <pthread.h>
#include <time.h>
void* SumPrime(void *arr);
bool isPrime(int num);
int res;
int n;
int step;
int main(){
int threads_count;
scanf("%d", &n);
scanf("%d", &threads_count);
time_t start = clock();
int ind = 0;
step = (int)(n / threads_count) + 1;
int arr[threads_count][step];
pthread_t threads[threads_count];
for(int k = 1; k <= threads_count; k++){
pthread_create(&threads[k - 1], NULL, SumPrime,(void*)(int)k);
}
for(int k = 0; k < threads_count; k++){
pthread_join(threads[k], NULL);
}
printf("aswer: %d \n", res);
time_t end = clock();
printf("Time: %f \n", ((float)(end - start)) / CLOCKS_PER_SEC);
}
void* SumPrime(void *args){
int k = (int)args;
int sum = 0;
//printf("%d \n", (*k));
for(int i = step * (k-1) + 1; i <= step * k; i++){
if(i <= n && isPrime(i)){
sum += i;
}
}
// printf("sum : %d \n", sum);
res += sum;
return NULL;
}
bool isPrime(int num){
int border = (int)sqrt(num) + 1;
bool ans = true;
if(num == 1){
ans = false;
}
if(num == 2){
ans = true;
}
else{
for(int i = 2; i <= border; i++){
if(num % i == 0){
ans = false;
}
}
}
return ans;
}
Возможно дело в неправильном распределении работы для потоков.