Я пытаюсь реализовать алгоритм сортировки нечетно-четного транспонирования в c с многопоточностью Программа получит файл с целой строкой, которую нужно правильно отсортировать. Я создал массив, с которым будет работать программа, и правильно читаю данные. Хотя я не совсем уверен, как правильно создавать темы. Я знаю, что количество нитей, которые мне понадобятся, всегда будет N / 2. Однако N не всегда будет 20, так что я сейчас занимаюсь конечной суммой. Это ограничение, хотя b / c N не всегда будет 20. Это может быть выше. Моя программа может обрабатывать только двадцать прямо сейчас. У меня также возникают проблемы с сортировкой, хотя у меня уже есть функция с именем swap. Функция начальной точки, где все это происходит. Я не уверен, с чего начать и в этом вопросе.
Это мой код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int list[20];
int n = 20;
int param[10];
pthread_t threads[10];
void readLINE(char *filename);
void do_swap(int R1, int R2);
void display();
void *startPoint( void *arg );
void readLINE(char *filename)
{
FILE* file;
int i,j;
file = fopen(filename,"r");
if(file==NULL)
{
printf("Error: can't open file.\n");
}
else
{
printf("File opened successfully.\n");
i = 0;
while(!feof(file))
{
fscanf(file,"%d", &list[i]);
i++;
}
printf("The numbers are: \n");
for(j=0; j< i-1; j++)
{
printf("%d\n", list[j]);
}
fclose(file);
}
n = i-1;
}
//swap positions of arguments in list array
void swap(int R1, int R2)
{
if (list[R1] > list[R1+1])
{
int temp = list[R1];
list[R1] = list[R2];
list[R2] = temp;
}
}
void display()
{
int count;
for (count = 0; count < n; count++)
{
//cout << list[count] << " " ;
printf("%d ",list[count]);
}
//cout << endl;
printf("\n");
}
void *startPoint( void *arg )
{
int R1 = *(int*)arg;
int count;
for (count = 0; count < n/2; count++)
{
}
return 0;
}
int main(int argc, char** argv)
{
pthread_attr_t tattr;
pthread_attr_init (&tattr);
pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);
readLINE(argv[1]);
printf("list[] presorted:");
display();
//create n/2 threads to do the sorting algorithm
//the parameter to each thread is an int:
//first thread param is 0
//second thread param is 2
//third thread param is 4 etc....
int count;
for (count = 0; count < n/2; count++)
{
param[count] = count*2;
pthread_create( &threads[ count], NULL, startPoint, (void*) ¶m[count]);
}
//wait for all the reads to finish before exiting the program
//otherwise the process would exit and abort all the threads
for (count = 0; count < n/2; count++)
{
pthread_join(threads[count], NULL);
}
//display the sorted state of the list
printf("list[] after sorting: ");
display();
exit(0);
}