Comment créer des threads et sortinger correctement dans un programme de sorting impair?

J’essaie d’implémenter l’algorithme de sorting de transposition impair en c avec multi-threading. Le programme recevra un fichier avec une ligne d’entiers à sortinger correctement. J’ai créé le tableau avec lequel le programme fonctionnera et je lis correctement les données. Bien que je ne sache pas trop comment créer les threads correctement. Je sais que la quantité de threads dont j’aurai besoin sera toujours N / 2. Cependant, le N ne sera pas toujours 20, donc je gère un montant fini pour le moment. C’est une limite si b / c N ne sera pas toujours 20. Il pourrait être plus élevé. Mon programme ne peut gérer que vingt programmes en ce moment. J’ai aussi des problèmes avec le sorting même si j’ai déjà une fonction appelée swap. La fonction de sharepoint départ est l’endroit où tout cela se passe. Je ne sais pas trop par où commencer sur cette question.

Ceci est mon code jusqu’à présent:

#include  #include  #include  #include  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 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*) &param[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); } 

Cela fait environ 10 ans que j’ai écrit du code C standard, alors pardonnez les erreurs mineures. Je pense que je peux vous aider conceptuellement.

Vous allouez vos tampons de manière statique. Déterminez plutôt les tailles impliquées et allouez dynamicment la mémoire dont vous avez besoin. Voici une bonne référence . Déterminez fondamentalement n comme vous lisez dans le fichier, et utilisez malloc pour allouer liste et param en fonction de cette valeur au lieu d’allouer un tableau fixe.

Quel problème spécifique rencontrez-vous avec la pièce de sorting? Avez-vous une erreur de compilation, une erreur d’exécution, un résultat de sorting incorrect, …?

METTRE À JOUR:

Voici une discussion sur le sorting en série et en parallèle qui inclut une implémentation du sorting parallèle impair de la transition dans C.