2017-04-17 2 views
0

Ich habe einige Schwierigkeiten beim Verständnis von mehreren Threads. Hier ist die Situation:Array mit mehreren Thread mit pThread in C vergleichen

Ich werde einige ganze Zahlen aus einem Array auswählen und sie in einem anderen Array mit einigen Bedingungen speichern. Die Bedingungen sind ziemlich kompliziert, im Grunde ist es eine große Menge Vergleich zwischen Array [i] und allen anderen Array [nicht ich]. Lass es uns checkCondition() nennen;

Zuerst erstelle ich den Pthread. Hier ist mein Code, notiert, dass dataPackage eine Struktur ist, die das Array enthält. Hier

for(int i = 0; i < thread_number; i++){ 
    if(pthread_create(&tid, NULL, checkPermissible, &dataPackage) != 0){ 
     perror("Error occurs when creating thread!!!\n"); 
     exit(EXIT_FAILURE); 
    } 
} 

for(int i = 0; i < thread_number; i++){ 
    pthread_join(tid, NULL); 
} 

ist der Gehalt an checkPermissible()

void* checkPermissible(void* content){ 
    readThread *dataPackage = content; 

    for(int i = 0; i < (*dataPackage).arrayLength; i++){ 
     if(checkCondition()){ 
      pthread_mutex_lock(&mutex); 
      insert(array[i], (*dataPackage).result); 
      pthread_mutex_unlock(&mutex); 
      //if condition true, insert it into result(a pointer) 
      //mutex avoid different thread insert the value at the same time 
     } 
    } 

    pthread_exit(NULL); 
} 

Allerdings würde es keinen Unterschied, wenn ich nicht pThread Art und Weise mit, dies zu tun. Wie implementiere ich checkPermicable(), um den Vorteil von mehreren Threads herauszustellen? Ich bin ziemlich verwirrt über dieses Zeug.

Meine Idee ist, das Array in NoOfThread in jedem Thread zu teilen. Zum Beispiel habe ich ein Array [20] und 4-Gewinde,

Thread 1: compute checkCondition with array[0] to array[4] 
Thread 2: compute checkCondition with array[5] to array[9] 
Thread 3: compute checkCondition with array[10] to array[14] 
Thread 4: compute checkCondition with array[15] to array[19] 

So etwas wie das, in dem ich weiß nicht, wie zu erreichen.

+0

Ist checkCondition eine CPU-intensive Operation? Wenn das nicht der Fall ist, profitieren Sie wahrscheinlich nicht von Multithreading. – klutt

+0

Nein, ist es nicht. Die Verwendung von Multithreading ist Voraussetzung, und ich glaube, es ist die Geschwindigkeit zu verbessern. – Hugo

+0

Aber was ist das Problem? Funktioniert es? Dein Beitrag hat keine eindeutige Frage. – klutt

Antwort

1

Erstens können Sie untere und obere Schranke oder Adressen auf einen Thread in Ihrer Struktur passieren wie folgt:

struct readThread { 
    int low; 
    int hi; 
    int * myarray; 
}; 

for (int i=low;i<hi;++i) 

//or 

struct readThread { 
    int * start; 
    int * end; 
}; 

for (int* i=start; i<end; ++i) 

Erstens ist ein einfacher und leichter als gut zu verstehen. Auf diese Weise wird Ihr Array aufgeteilt.

Es gibt auch andere Möglichkeiten, wie geteilte Kopien Ihres Fehlers für jeden Thread zu erstellen.

+0

Vielen Dank !!! Das ist, was ich will!! – Hugo