Question: Hello, When I copy the code below that is copyable and post this into comiplers these errors come up. $gcc -o main *.c /tmp/ccT7JzVP.o: In

Hello, When I copy the code below that is copyable and post this into comiplers these errors come up.

$gcc -o main *.c /tmp/ccT7JzVP.o: In function `main': main.c:(.text+0x4b): undefined reference to `pthread_create' main.c:(.text+0x8c): undefined reference to `pthread_create' main.c:(.text+0xac): undefined reference to `pthread_join' main.c:(.text+0xf7): undefined reference to `pthread_create' main.c:(.text+0x108): undefined reference to `pthread_join' collect2: error: ld returned 1 exit status

Is there a way you can take the copy-able code and compile it and fix these errors and post the working solution to this question?

https://www.chegg.com/homework-help/questions-and-answers/write-multithreaded-sorting-program-c-works-follows-list-integers-divided-two-smaller-list-q5125010

Copyable code:

Code:

//Sort a list of numbers using two separate threads

//by sorting half of each list separately then

//recombining the lists

#include

#include

#include

#define SIZE 10

#define NUMBER_OF_THREADS 3

void *sorter(void *params); /* thread that performs basic sorting algorithm */

void *merger(void *params); /* thread that performs merging of results */

int list[SIZE] = {7,1,8,3,4,2,6,9,12,15};

int result[SIZE];

typedef struct

{

int from_index;

int to_index;

} parameters;

int main (int argc, const char * argv[])

{

int i;

pthread_t workers[NUMBER_OF_THREADS];

/* establish the first sorting thread */

parameters *data = (parameters *) malloc (sizeof(parameters));

data->from_index = 0;

data->to_index = (SIZE/2) - 1;

pthread_create(&workers[0], 0, sorter, data);

/* establish the second sorting thread */

data = (parameters *) malloc (sizeof(parameters));

data->from_index = (SIZE/2);

data->to_index = SIZE - 1;

pthread_create(&workers[1], 0, sorter, data);

/* now wait for the 2 sorting threads to finish */

for (i = 0; i < NUMBER_OF_THREADS - 1; i++)

pthread_join(workers[i], NULL);

/* establish the merge thread */

data = (parameters *) malloc(sizeof(parameters));

data->from_index = 0;

data->to_index = (SIZE/2);

pthread_create(&workers[2], 0, merger, data);

/* wait for the merge thread to finish */

pthread_join(workers[2], NULL);

/* output the sorted array */

return 0;

}

void *sorter(void *params)

{

parameters* p = (parameters *)params;

//SORT

int begin = p->from_index;

int end = p->to_index+1;

int z;

for(z = begin; z < end; z++)

{

printf("The array recieved is: %d ", list[z]);

}

printf(" ");

int i,j,t,k;

for(i=begin; i< end; i++)

{

for(j=begin; j< end-i-1; j++)

{

if(list[j] > list[j+1])

{

t = list[j];

list[j] = list[j+1];

list[j+1] = t;

}

}

}

for(k = begin; k< end; k++){

printf("The sorted array: %d ", list[k]);

}

int x;

for(x=begin; x

{

result[x]=list[x] ;

}

printf(" ");

pthread_exit(0);

}

void *merger(void *params)

{

parameters* p = (parameters *)params;

//MERGE

int begin = p->from_index;

int end = p->to_index+1;

int i,j,t;

for(i=begin; i< end; i++)

{

for(j=begin; j< end-i; j++)

{

if(result[j] > result[j+1])

{

t = result[j];

result[j] = result[j+1];

result[j+1] = t;

}

}

}

int d;

for(d=0; d

{

printf("The final resulting array is: %d ", result[d]);

}

pthread_exit(0);

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!