Newer
Older
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
FILE *file_in;
FILE *file_out;
char *f_in;
char *f_out;
int number_lines;
int nthreads = 1;
buffer1 *buffer_1;
buffer2 *buffer_2;
void *reading() {
file_in = fopen(f_in, "r");
if (file_in == NULL) {
printf("Error with file_in.\n");
exit(EXIT_FAILURE);
} else {
printf("file_in opened with succes.\n");
}
int number = 0;
sem_wait(&(buffer_1->free));
pthread_mutex_lock(&(buffer_1->mutex));
pthread_mutex_unlock(&(buffer_1->mutex));
sem_post(&(buffer_1->full));
}
//printf("%d, number\n", get_node_t(list_prime));
//printf("%d, divider\n", get_node_t(list_prime));
//printf("%d, divider2\n", get_node_t(list_prime));
sem_wait(&(buffer_2->free));
pthread_mutex_lock(&(buffer_2->mutex));
pthread_mutex_unlock(&(buffer_2->mutex));
sem_post(&(buffer_2->full));
void *writing() {
file_out = fopen(f_out, "w");
if (file_out == NULL) {
printf("Error with file_out.\n");
exit(EXIT_FAILURE);
} else {
printf("file_out opened with succes.\n");
}
//fprintf(file_out, "%d : ", removed->length);
int length = removed->length;
for (int i = 0; i < length; i++) {
fprintf(file_out, "%d ", get_node_t(removed));
while ((opt = getopt(argc, argv, "N:")) != -1) {
switch(opt) {
nthreads = atoi(optarg);
printf("Number of threads : %d.\n", nthreads);
if (pthread_create(&read, NULL, &reading, NULL) != 0) {
printf("Error with creating reading thread.\n");
return -1;
if (pthread_create(&calc[i], NULL, &calculating, NULL) != 0) {
printf("Error with creating calculating thread.\n");
return -1;
}
if (pthread_create(&write, NULL, &writing, NULL) != 0) {
printf("Error with creating writing thread.\n");
return -1;
if (pthread_join(read, NULL) != 0) {
printf("Error with join reading thread.\n");
return -1;
// pthread_mutex_lock(&(buffer_1->mutex));
// buffer_1->is_running = false;
// pthread_mutex_unlock(&(buffer_1->mutex));
for (int i = 0; i < nthreads; i++) {
if (pthread_join(calc[i], NULL) != 0) {
printf("Error with join calculating thread.\n");
return -1;
}
if (pthread_join(write, NULL) != 0) {
printf("Error with join writing thread.\n");
return -1;
fclose(file_in);
fclose(file_out);
printf("Files close.\n");
clear_list_t(buffer_1->numbers);
free(buffer_1->numbers);
clear_list_lst(buffer_2->prime_numbers);
free(buffer_2->prime_numbers);