Я пишу код, который считает простые числа от 0 до N, используя 8 потоков, чтобы ускорить процесс. Я провел некоторые исследования многопоточности в C онлайн, но я все еще не уверен, правильно ли я их использую в этом случае. Они действительно ускоряют время выполнения моей программы? Если я не ошибаюсь, pthread выполняет свои функции одновременно, нет?
#include <pthread.h>
#include <stdio.h>
#include <math.h>
#define NUM_COUNT 800
#define NUM_THREADS 8
int counter = 0; //counter to count primes
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
//function to find primes
int is_prime(int n) {
if (n < 2)return 0;
if (n == 2)return 1;
if (n % 2 == 0)return 0;
for (int i=3; i < n; i += 2) {
if (n % i == 0) return 0;
}
return 1;
}
void *PrintPrimes(void *threadid) {
int thread_start, thread_end;
int thread_id = (int)threadid; //store thread id in thread_id
thread_start = thread_id*(NUM_COUNT/NUM_THREADS); //determine where individual thread begins searching for primes
thread_end = thread_start+(NUM_COUNT/NUM_THREADS); //determine where thread ends searching for primes
for(int n = thread_start; n < thread_end; n++) {
if (is_prime(n)) {
pthread_mutex_lock(&mutex);
counter++;
printf("the number of primes is currently %d\n", counter);
pthread_mutex_unlock(&mutex);
}
}
pthread_exit(NULL);
}
int main(int argc, char *argv[]) {
pthread_t threads[NUM_THREADS];
for(int i = 0; i < NUM_THREADS; i++){
pthread_create(&threads[i], NULL, PrintPrimes, (void *)i);
}
pthread_exit(NULL);
}