Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Effizientes arbeiten mit mehreren Threads (Linux)

Empfohlene Antworten

Veröffentlicht

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.