Как изменить программу для использования нескольких потоков потребительского уровня
У меня есть проблемы, которые мне нужна помощь в решении. 1-я проблема состоит в том, чтобы иметь несколько потребительских потоков, работающих вместе, чтобы найти все простые числа в заданном диапазоне и измерить, сколько времени потребуется программе, чтобы найти все простые числа, используя 2, 3 и 4 потребительских потока. 2-я проблема состоит в том, чтобы иметь буфер из 2 элементов вместо буфера из 1 элемента и измерить, сколько времени потребуется программе для поиска и печати всех простых чисел с использованием 2, 3 и 4 потребительских потоков. Вот мой код. Я попробовал поискать в интернете и ничего не нашел. Не могли бы вы мне помочь? Мой код приведен ниже.
Что я уже пробовал:
#include <stdio.h> #include <pthread.h> #define MAX 1234568500 pthread_mutex_t the_mutex; pthread_cond_t condc, condp; int buffer = 0; unsigned long long int isPrime(unsigned long long int x) { int i; for(i=2;i<=x/2;++i) { if(x % i == 0) { return -1; } } return x; } void *producer(void *ptr) { unsigned long long int i; for(i=1234567800;i<=MAX;i++) { pthread_mutex_lock(&the_mutex); while(buffer!=0) pthread_cond_wait(&condp,&the_mutex); buffer = i; pthread_cond_signal(&condc); pthread_mutex_unlock(&the_mutex); } pthread_exit(0); } void *consumer(void *ptr) { unsigned long long int i; for(i=1234567800;i<=MAX;i++) { pthread_mutex_lock(&the_mutex); while(buffer==0) pthread_cond_wait(&condc,&the_mutex); if(isPrime(buffer)!=-1) printf("%d\n",isPrime(buffer)); buffer = 0; pthread_cond_signal(&condp); pthread_mutex_unlock(&the_mutex); } pthread_exit(0); } int main(int argc, char **argv) { int num_args = argc - 1 pthread_t pro,con; pthread_mutex_init(&the_mutex,0); pthread_cond_init(&condc,0); pthread_cond_init(&condp,0); pthread_create(&con,0,consumer,0); pthread_create(&pro,0,producer,0); pthread_join(pro,0); pthread_join(con,0); pthread_cond_destroy(&condc); pthread_cond_destroy(&condp); pthread_mutex_destroy(&the_mutex); return 0; }