Zum Inhalt springen

Effizientes arbeiten mit mehreren Threads (Linux)


Shamharoth

Empfohlene Beiträge

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...