Не работает многопоточность в С

Этот код находит сумму всех простых чисел, меньших 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;
}

Возможно дело в неправильном распределении работы для потоков.


Ответы (0 шт):