Shamharoth Geschrieben 13. Mai 2010 Geschrieben 13. Mai 2010 Hallo zusammen Momentan bin ich drann mit pthreads unter linux zu arbeiten. Dabei werden die Threads sozusagen als "Arbeiter" genutzt. Der Hauptprozess übergibt den Threads n Objekt mit nem pointer auf nen vector<string> in dem der zu bearbeitenden Inhalt steht, ein pointer vector<string> mit der id des threads, der den eintrag bearbeiten soll und dann noch die id des threads. Zudem noch paar andre Werte die jetz nur Zweitrangig sind. Der Hauptprozess selbst befüllt danach nur noch die Elemente und sagt welcher Thread sich kümmern soll. Sind alle Fächer belegt (Vorgabe max. 20 Fächer hab ich mir gesagt), soll ne Pause gemacht werde. Ähnlich sollen dann die Threads arbeiten. Sollen prüfen, ob ein Fach für Sie bereitsteht, wenn ja dann soll der Thread was machen, wenn nein soll er den Prozessor nicht unnötig belasten und soll ne Pause machen. Hier die Frage: sleep mud usleep (?) arbeiten ja threadabhängig (sleep wirkt sich nur auf den aktuellen Thread aus. Doch wenn ich Sleep im Hauptprozess nutze, werden da die andren Threads mit schlafen gelegt? Hab nämlich testhalber 'n Programm gemachd und dabei gab es das Problem, dass die Testausgabe anders ausgschaut hat als ich erhofft habe. Ich habe dabei ein Thread erstellt welches eine Schleife ausführt in dem insg. 5 mal Pause (sleep(1)) gemacht wird und danach eine Ausgabe. Das Gleiche sollte auch im Hauptprozessor passieren nur mit sleep(2), damit der Hauptprozess länger dauert . Nochmal insgesammt der grund für den Thread: Wirkt sich sleep dann nur auf Hauptprozess aus oder auch auf die Threads? Oder hab ich einfach n Fehler gemacht bei meinem Testprogramm? Danke im voraus Zitieren
carstenj Geschrieben 14. Mai 2010 Geschrieben 14. Mai 2010 Hi, Code wäre hier angebracht. Im Grunde geht es wohl darum, dass du deine Threads synchronisieren musst. Lies dir das mal durch (wenn noch nicht geschehen): https://computing.llnl.gov/tutorials/pthreads/ Zitieren
Shamharoth Geschrieben 14. Mai 2010 Autor Geschrieben 14. Mai 2010 Da wenn dann vom gleichen Bereich nur gelesen wird, brauch ich doch keine Synchronisation, oder? So wie ich es verstanden hab brauch ich Synchronisation nur dann wenn z.B. 2 Threads das gleiche Element zur gleichen Zeit bearbeiten wollen. Bei mir ist durch die Zuweisung zu einem Thread eine eindeutige Zuordnung. Ist das überhaupt sinnig einem Thread pointer auf die entsprechenden Vectoren zu übergeben? Es gibt ja verschieden Möglichkeiten zwischen Hauptprogramm und Threads Daten auszutauschen (Stichwort Shared Memory), jedoch sind die Daten, die verarbeitet werden unterschiedlich Groß, was Shared Memory ja unbrauchbar macht (Und es ist höchst warscheinlich 5 mal um die eck geguggd). Zum Beispielcode .. kann ich das jetzt nichtmehr Rekonstruieren. Anscheinend war Irgendwo a bug vorgestern drann. pthread_t ntid; int wert = 0; void *my_thread(void *arg) { for(int i = 0; i < 40; i++) { usleep(1000 * 200); printf("%d", i); wert+=100; } pthread_exit(NULL); } int main(void) { int err; err = pthread_create(&ntid, NULL, my_thread, NULL); if(err != 0) return 1; sleep(1); for(int abc = 0; abc < 8; abc++) { sleep(1); printf(" %d %d\n", abc,wert); } return 0; } Jetzt funktioniert das Beispiel (Wegen den Variablendefinitionen nich wundern. In Testprogrammen nehm ich immer seltsame Namen für Variablen). Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.