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.
Ist checkCondition eine CPU-intensive Operation? Wenn das nicht der Fall ist, profitieren Sie wahrscheinlich nicht von Multithreading. – klutt
Nein, ist es nicht. Die Verwendung von Multithreading ist Voraussetzung, und ich glaube, es ist die Geschwindigkeit zu verbessern. – Hugo
Aber was ist das Problem? Funktioniert es? Dein Beitrag hat keine eindeutige Frage. – klutt