#include <iostream>
#include <stdlib.h>
#include <pthread.h>
#include <fstream>
#include <sstream>
#include <mutex>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <vector>
using namespace std;
#define NUM_THREADS 2
pthread_mutex_t mutexChild;
pthread_cond_t condChild;
vector<int> vect;
void openfile(ifstream&, string);
void* childthread(void *args)
{
ifstream inFile;
openfile(inFile, "Fruits.txt");
string line;
pthread_mutex_lock(&mutexChild);
int countt = 0;
int lines = 0;
int total = 0;
while (!inFile.eof())
{
getline(inFile, line);
countt = 0;
for (int i = 0; i < line.size(); i++)
if ((line[i] >= 'A' && line[i] <= 'Z')
|| (line[i] >= 'a' && line[i] <= 'z'))
{
countt++;
}
lines++;
vect.push_back(countt);
}
pthread_mutex_unlock(&mutexChild);
pthread_exit(NULL);
}
void* parentthread(void *args)
{
ifstream inFile;
openfile(inFile, "Fruits.txt");
string line;
pthread_mutex_lock(&mutexChild);
int lines = 0;
int total = 0;
int countt = 0;
while (!inFile.eof())
{
getline(inFile, line);
for (int i = 0; i < vect.size(); i++)
cout << vect[i] << endl;
}
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t threads;
int thrd1;
//int i;
int thrd2;
pthread_mutex_init(&mutexChild, NULL);
thrd1 = pthread_create(&threads, NULL, childthread, NULL);
if (thrd1)
{
cout << "Error:unable to create thread," << thrd1 << endl;
exit(-1);
}
pthread_t threads2;
thrd2 = pthread_create(&threads2, NULL, parentthread, NULL);
if (thrd2)
{
cout << "Error:unable to create thread," << thrd2 << endl;
exit(-1);
}
// pthread_join(threads,NULL);
// pthread_join(threads2, NULL);
//threads.join();
///threads2.join();
pthread_mutex_destroy(&mutexChild);
pthread_cond_destroy(&condChild);
pthread_exit(NULL);
}
void openfile(ifstream &inFile, string fname)
{
inFile.open(fname);
if (inFile.is_open())
{
// cout << "Successfully opened File" << endl;
}
}
My child threads keeps printing the output 8 times when I only need it to print once. There are 8 lines in my txt file so im guessing thats why its printing the output 8 times. Can anyone tell me why it's doing and how I change it. I also know there is an easier why to do this task but I am required to exchange data using posix threads. Its printing like this 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 8 times when I just need 1 2 3 4 5 6 7 8