Thread programming

acesouthall (9)
Making a thread program which takes segments of an array then processes them with a computation in multiple threads. Will be testing between 1-8. The array is of a big size so that it takes some time to process so that I can see changes when I add threads.

I should be finished I believe but I have issues.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <sys/time.h>
#include "hr_time.h"
#include <pthread.h>

#define ARRAYSIZE 1000000
#define THREADS 2

using namespace std;

struct arrayStruct {
int * dataArray;
int aStart;
int length;
};

//-----Thread Function-----
void* thread_function(void* psegment)
{
arrayStruct* segment = (arrayStruct*)psegment;

for (int i = segment->aStart; i < (segment->aStart + segment->length); i+=1)
{
// First populate array with random numbers between 1-100
segment->dataArray[i] = (1+ rand() % 100);

// Divide and multiply each element of the array by 100 random numbers upto 5
for (int j = 0; j < 2; j++)
{
segment->dataArray[i] = (segment->dataArray[i]*(2+rand() % 10));
}
}
}

int main()
{
int* dArray;
dArray = new int[ARRAYSIZE];
int segmentSize;

// Time Variables
timeval start, stop, result;
float t;

srand((unsigned)time(NULL));

cout << "Processing and Thread Testing with an Array of Random Numbers" << endl;

// Thread setup
for(int i = 1; i <= THREADS; i+=1)
{
// Thread Data Setup
pthread_t* thread = new pthread_t[THREADS];
arrayStruct* segment = new arrayStruct[THREADS];
segmentSize = ARRAYSIZE/THREADS;
void* exitStatus;

for(int j = 0; j < THREADS; j+=1)
{
pthread_t nThread;
arrayStruct nSegment;

// Array segment setup
nSegment.dataArray = dArray;
nSegment.aStart = (j * segmentSize);
nSegment.length = segmentSize;

thread[j] = nThread;
segment[j] = nSegment;
}

// Create thread
for(int j = 0; j < THREADS; j+=1)
pthread_create(&thread[j], NULL, thread_function, &segment[j]);

// Wait for thread to terminate
for(int j = 0; j < THREADS; j+=1)
pthread_join(thread[j], &exitStatus);

delete thread;
delete segment;
}

/*//Gets the time at the start of the test
gettimeofday(&start, NULL);


//Gets the time at the end of the test
gettimeofday(&stop, NULL);

// Timing calcuations and outputs
timersub(&stop, &start, &result);

t += (result.tv_sec + result.tv_usec/1000000.0);

cout << t;*/



return 0;
}


The issues I get are within the thread function:
declaration of 'arrayStruct* segment' shadows a parameter

and in main()
expected type-specifier before 'dataArray'

EDIT: Two original errors corrected. Stuck with a ';' issue. These issues drive me insane -_-

EDIT2: All errors fixed but now I have a new issue. When I increase threads it just increases the amount of elements. Or arrays.

So if ARRAYSIZE = 10 and THREADS = 2 I'll have 20 results post.
Last edited on
acesouthall (9)
Solved the shadows a parameter issue. I was using the same variable name.

Type specifier issues also solved: Missed out 'int'

I will make the changes to the post but I am still missing a ';' before dataArray on line 40 which is near the start of main.
ne555 (4383)
The error message is not the happiest one (you ought to post it, by the way)
dArray = new int dataArray[ARRAYSIZE]; ¿why did you write `dataArray' there?

Edit: OK, you did post it. ¿But why leave out critical information like the line number?
Last edited on
acesouthall (9)
No error messages. But like said in my EDIT2: If I have 2 threads and 10 elements I'll have 20 results post out.
Registered users can post here. Sign in or register to post.