Michael WespHallo Newsgroup, ich möchte meine Terrariensteuerung umbauen auf die Verwendung von Threads für die einzelnen Sensoren, die überwacht werden. Mit Threads habe ich bisher nur ein wenig rumexperimentiert. Die Threads des Proggies müssen sowohl anderen laufenden Threads als auch dem Hauptprogramm Variablen übergeben, bzw. während des Laufens Variablen des Hauptprogramms lesen können. Das macht man, denke ich, eigentlich über Semaphoren. Möchte ich auch, finde aber keine Beispiele, die für einen Anfänger der Threadprogrammierung zu verstehen sind. kann zum möglichst einfachen Datenaustausch zwischen verschiedenen Threads in einem Programm auch das /proc - Verzeichnis verwendet werden bzw. wenn nicht, warum nicht? Ist doch einfacher als über die Semaphores, denke ich, wahrscheinlich aber kein guter Stil. Michl
Hi, On Tue, 15 Jul 2003, Michael Wesp wrote:
Das macht man, denke ich, eigentlich über Semaphoren.
Da sich Threads das Datensegment teilen, kann man dann einfach in static oder globale Variablen (z.b. eine Message-struct) die Nachricht reinschreiben. Dann reduziert sich das Problem des Datenaustausches auf ein Problem zur Threadsynchronisierung. pthread_cond_wait(3) Da sind auch kurze Beispiele zur Threadsynchronisierung drin. Denke dran, das du die condition variablen mit einer mutex schuetzen musst.
kann zum möglichst einfachen Datenaustausch zwischen verschiedenen Threads in einem Programm auch das /proc - Verzeichnis verwendet werden bzw. wenn nicht, warum nicht?
Ich wuesste nicht, wie du das /proc Filesystem zum Datenaustausch verwenden willst. Man kann ja nicht mal normale Files darin anlegen. Ciao, Micha.
----- Original Message -----
From: "Michael Matz"
Hi,
On Tue, 15 Jul 2003, Michael Wesp wrote:
Das macht man, denke ich, eigentlich über Semaphoren.
Da sich Threads das Datensegment teilen, kann man dann einfach in static oder globale Variablen (z.b. eine Message-struct) die Nachricht reinschreiben. Dann reduziert sich das Problem des Datenaustausches auf ein Problem zur Threadsynchronisierung.
pthread_cond_wait(3)
Da sind auch kurze Beispiele zur Threadsynchronisierung drin. Denke dran, das du die condition variablen mit einer mutex schuetzen musst.
OK zieh ich mir mal rein, auf den ersten Blick versteh ich noch nicht alles. Wenn ich Dich recht verstanden habe, könnte ich den Zugriff auf die globalen Variablen testen, wenn ich sie in gewissen Abständen polle. Die Threadsynchronisierung sorgt dann dafür, daß das ganze effizient ohne Polling funktioniert, und der Thread bei Änderung einer relevanten Variable aufgeweckt wird und bis dahin keine Rechenzeit verbrät. Habe ich das richtig verstanden?
kann zum möglichst einfachen Datenaustausch zwischen verschiedenen Threads in einem Programm auch das /proc - Verzeichnis verwendet werden bzw. wenn nicht, warum nicht?
Ich wuesste nicht, wie du das /proc Filesystem zum Datenaustausch verwenden willst. Man kann ja nicht mal normale Files darin anlegen.
Das wusste ich nicht. Ich habe gedacht, das laesst sich ganz normal benutzen.
Ciao, Micha.
Danke für die Unterstützung, Gruß, Michl
Hi, On Tue, 15 Jul 2003, Michael Wesp wrote:
Wenn ich Dich recht verstanden habe, könnte ich den Zugriff auf die globalen Variablen testen, wenn ich sie in gewissen Abständen polle. Die Threadsynchronisierung sorgt dann dafür, daß das ganze effizient ohne Polling funktioniert, und der Thread bei Änderung einer relevanten Variable aufgeweckt wird und bis dahin keine Rechenzeit verbrät.
Habe ich das richtig verstanden?
Jupp. Sowas wie (pseudo-code): pthread_cond_t machwas; char *message; thread1() { while (1) { warte_auf (&machwas); printf ("got message: %s\n", message); } } thread2() { message = "Yeah"; pthread_cond_broadcast (&machwas); } Da sind jetzt keine mutexe dabei, die aber notwendig sind. Aber hier wird quasi in warte_auf() (welches pthread_cond_wait benutzen muss) darauf gewartet, das irgenein anderer Thread die Condition Variable 'machwas' "aktiviert". Du musst natuerlich auch Nachrichten zurueckschicken koennen, damit thread2() mitbekommt, wann thread1() mit dem Verarbeiten (oder wenigstens wegspeichern) der Nachricht fertig ist. Also noch ne condvar 'binfertig' dazu, auf die in thread2() gewartet wird, und auf die in thread1() gebroadcastet wird.
[... /proc kann man nicht beschreiben ...]
Das wusste ich nicht. Ich habe gedacht, das laesst sich ganz normal benutzen.
Noe. Nicht in dem Sinne. Es liefert mehr oder minder Informationen ueber das System und die Prozesse. Es gehoeren auch schreibbare Dateien dazu, mit deren Hilfe man einige Systemparameter aendern kann. Aber da kann man nicht einfach reinschreiben. Wenn man ehh schon Threads benutzt will man sowieso nicht durchs Dateisystem gehen, nur um Daten auszutauschen. Wuerde viel zu langsam sein. Ciao, Micha.
Danke, Du hast mir eine gutes Stück weitergeholfen.
Gruß
Michl
----- Original Message -----
From: "Michael Matz"
Hi,
On Tue, 15 Jul 2003, Michael Wesp wrote:
Wenn ich Dich recht verstanden habe, könnte ich den Zugriff auf die globalen Variablen testen, wenn ich sie in gewissen Abständen polle. Die Threadsynchronisierung sorgt dann dafür, daß das ganze effizient ohne Polling funktioniert, und der Thread bei Änderung einer relevanten Variable aufgeweckt wird und bis dahin keine Rechenzeit verbrät.
Habe ich das richtig verstanden?
Jupp.
Sowas wie (pseudo-code):
pthread_cond_t machwas; char *message; thread1() { while (1) { warte_auf (&machwas); printf ("got message: %s\n", message); } } thread2() { message = "Yeah"; pthread_cond_broadcast (&machwas); }
Da sind jetzt keine mutexe dabei, die aber notwendig sind. Aber hier wird quasi in warte_auf() (welches pthread_cond_wait benutzen muss) darauf gewartet, das irgenein anderer Thread die Condition Variable 'machwas' "aktiviert".
Du musst natuerlich auch Nachrichten zurueckschicken koennen, damit thread2() mitbekommt, wann thread1() mit dem Verarbeiten (oder wenigstens wegspeichern) der Nachricht fertig ist. Also noch ne condvar 'binfertig' dazu, auf die in thread2() gewartet wird, und auf die in thread1() gebroadcastet wird.
[... /proc kann man nicht beschreiben ...]
Das wusste ich nicht. Ich habe gedacht, das laesst sich ganz normal benutzen.
Noe. Nicht in dem Sinne. Es liefert mehr oder minder Informationen ueber das System und die Prozesse. Es gehoeren auch schreibbare Dateien dazu, mit deren Hilfe man einige Systemparameter aendern kann. Aber da kann man nicht einfach reinschreiben. Wenn man ehh schon Threads benutzt will man sowieso nicht durchs Dateisystem gehen, nur um Daten auszutauschen. Wuerde viel zu langsam sein.
Ciao, Micha.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
participants (2)
-
Michael Matz
-
Michael Wesp