2016-04-21 8 views
0

Ich möchte Partition Partition Teil zusammenführen, aber ich weiß nicht weiter. Bitte geben Sie mir einige Ideen basierend auf meiner Situation, danke!Array-Partition mit Pthread in Linux C

Serienteil:

void Partition(int arr[], int low, int high) 
{ 
    int mid;  
    if(low < high) 
    { 
     mid = (low + high)/2; 
     Partition(arr, low, mid); //first half of data 
     Partition(arr, mid+1, high);//second half of data 
     MergeSort(arr, low, mid, high); 
    } 
} 

Was ich für die parallele Version haben:

void *PartitionTask(void* rank) 
{ 
    long my_rank = (long)rank; 
    if(my_rank == 0) 
    { 
     int mid;  
     if(low < high) 
     { 
      mid = (low + high)/2; 
      Partition(arr, low, mid); //first half of data 
      Partition(arr, mid+1, high);//second half of data 
      MergeSort(arr, low, mid, high); 
     } 
    } 
    else 
    { 

    } 
} 

Antwort

2

Die einfache und direkte Lösung wäre wahrscheinlich einen neuen Thread für die eine Partition, um laichen und Eingabe der anderen im aufrufenden Thread.

pthread_create(&low_pid, NULL, Partition, (void *)ptr_argument) 

Mit dem ptr_argument als Zeiger auf einen gemeinsamen Speicher struct den Zeiger auf FER und niedrige/hohe Werte enthält.

Wenn der aufrufende Thread zurückkehrt, rufen Sie mit low_pid auf, um vor dem Zusammenführen zu synchronisieren.

+0

'pthread_spawn()'? Du meinst 'pthread_create()', nicht wahr? – alk

+0

@alk Ja, natürlich! Tippen Sie es falsch, beim Nachschlagen der Man-Seite, Gewohnheiten von Erlang kriechen meine C. Vielen Dank für das darauf hin (: – Linuxxon

+0

@ Linxxon danke! Eine Sache, ich bin mir nicht sicher. In der seriellen Version, es rekursiv aufrufen Partition In der Pthread-Version, wie kann ich das gleiche tun? Bitte geben Sie mir einen Vorschlag. – Alison