Discussion:
Einmal geschriebene Variable von mehreren Threads lesen?
(zu alt für eine Antwort)
Manuel Reimer
2016-02-12 14:57:23 UTC
Permalink
Raw Message
Hallo,

wahrscheinlich habe ich nur mit den falschen Begriffen gesucht, aber ich
habe bisher keine definitive Antwort finden können.

Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort abgelegten
Werte in einer globalen Struktur speichere.

Sobald das geschehen ist, wird eine Reihe weiterer Threads gestartet.
Mit diesen will ich *nur lesend* auf die Konfiguration zugreifen.

Geht das ohne Probleme? Nach meinem Verständnis kann ich beliebig oft
auf meine globale Struktur *lesend* zugreifen, denn geschrieben wird ja
nur ein einziges Mal im Hauptthread bevor die anderen Threads gestartet
werden.

Danke im Voraus

Gruß

Manuel
Claus Reibenstein
2016-02-12 15:34:31 UTC
Permalink
Raw Message
Post by Manuel Reimer
Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort abgelegten
Werte in einer globalen Struktur speichere.
Sobald das geschehen ist, wird eine Reihe weiterer Threads gestartet.
Threads sind nicht Bestandteil der Sprache C. Von daher ist die Frage
hier nur bedingt zu beantworten.
Post by Manuel Reimer
Mit diesen will ich *nur lesend* auf die Konfiguration zugreifen.
Geht das ohne Probleme?
Du möchtest also von mehreren Stellen aus auf globale Variablen
zugreifen. Aus Sicht der Sprache C ist das kein Problem. Inwiefern Dein
Thread-System hier zusätzliche Bedingungen stellt, kann hier nicht
geklärt werden.

Gruß
Claus
Stefan Reuther
2016-02-12 16:40:01 UTC
Permalink
Raw Message
Post by Claus Reibenstein
Post by Manuel Reimer
Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort abgelegten
Werte in einer globalen Struktur speichere.
Sobald das geschehen ist, wird eine Reihe weiterer Threads gestartet.
Threads sind nicht Bestandteil der Sprache C. Von daher ist die Frage
hier nur bedingt zu beantworten.
Dieser klassische Textbaustein gilt seit C11 nicht mehr.

Und, wenn ich das richtig lese, garantiert C11, dass Threads erfolgreich
auf Variablen zugreifen können, die vor seinem Start geschrieben werden
("The completion of the thrd_create function synchronizes with the
beginning of the execution of the new thread.").


Stefan
Claus Reibenstein
2016-02-16 15:51:22 UTC
Permalink
Raw Message
Post by Stefan Reuther
Post by Claus Reibenstein
Threads sind nicht Bestandteil der Sprache C. Von daher ist die Frage
hier nur bedingt zu beantworten.
Dieser klassische Textbaustein gilt seit C11 nicht mehr.
Ah, es gibt einen neuen Standard ISO/IEC 9899:2011. Den kenne ich noch
nicht. Kann man den irgendwo kostengünstig bekommen?

Ich bin bei C99 aka ISO/IEC 9899:1999 stehengeblieben. Habe schon lange
kein C mehr programmiert.

Gruß
Clausd
Helmut Schellong
2016-02-16 18:05:48 UTC
Permalink
Raw Message
Post by Claus Reibenstein
Ah, es gibt einen neuen Standard ISO/IEC 9899:2011. Den kenne ich noch
nicht. Kann man den irgendwo kostengünstig bekommen?
Ich bin bei C99 aka ISO/IEC 9899:1999 stehengeblieben. Habe schon lange
kein C mehr programmiert.
Ich habe mir den C11 ebenfalls von webstore.ansi.org besorgt, für etwa 30 $.
--
Mit freundlichen Grüßen
Helmut Schellong ***@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm
Claus Reibenstein
2016-02-16 18:52:20 UTC
Permalink
Raw Message
Post by Helmut Schellong
Ich habe mir den C11 ebenfalls von webstore.ansi.org besorgt, für etwa 30 $.
Ich finde ihn dort aber nur für 265 $. Wo hast Du ihn für 30 $ gesehen?

Gruß
Claus
Helmut Schellong
2016-02-17 11:55:52 UTC
Permalink
Raw Message
Post by Claus Reibenstein
Post by Helmut Schellong
Ich habe mir den C11 ebenfalls von webstore.ansi.org besorgt, für etwa 30 $.
Ich finde ihn dort aber nur für 265 $. Wo hast Du ihn für 30 $ gesehen?
Das weiß ich doch nicht mehr, nach Jahren.

Jedenfalls hatte ich jeweils nach pdf-Download-Möglichkeit gesucht.

http://webstore.ansi.org/FindStandards.aspx?SearchString=INCITS%2fISO%2fIEC+9899%3a2011[2012]&SearchOption=0&PageNum=0&SearchTermsArray=null|INCITS%2fISO%2fIEC+9899%3a2011[2012]|null

Mittlerweile 60$.

Du mußt ''INCITS'' ISO/IEC ... wählen.
--
Mit freundlichen Grüßen
Helmut Schellong ***@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm
Stefan Reuther
2016-02-16 17:20:52 UTC
Permalink
Raw Message
Post by Claus Reibenstein
Post by Stefan Reuther
Post by Claus Reibenstein
Threads sind nicht Bestandteil der Sprache C. Von daher ist die Frage
hier nur bedingt zu beantworten.
Dieser klassische Textbaustein gilt seit C11 nicht mehr.
Ah, es gibt einen neuen Standard ISO/IEC 9899:2011. Den kenne ich noch
nicht. Kann man den irgendwo kostengünstig bekommen?
Im Zweifel auf die gleiche Weise, wie man den quasi-C99-Standard
bekommt: man nimmt den letzten Draft. Das wäre der hier:
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf> verlinkt von
<https://en.wikipedia.org/wiki/C11_%28C_standard_revision%29>.


Stefan
Rainer Weikusat
2016-02-12 16:14:44 UTC
Permalink
Raw Message
Post by Manuel Reimer
wahrscheinlich habe ich nur mit den falschen Begriffen gesucht, aber
ich habe bisher keine definitive Antwort finden können.
Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort
abgelegten Werte in einer globalen Struktur speichere.
Sobald das geschehen ist, wird eine Reihe weiterer Threads
gestartet. Mit diesen will ich *nur lesend* auf die Konfiguration
zugreifen.
Geht das ohne Probleme? Nach meinem Verständnis kann ich beliebig oft
auf meine globale Struktur *lesend* zugreifen, denn geschrieben wird
ja nur ein einziges Mal im Hauptthread bevor die anderen Threads
gestartet werden.
Praktisch ist das richtig, theoretisch haben wenigstens the C++11x-Klone
das 'multiple concurrent reads race' erfunden (aber vielleicht wieder
aufgegeben).
Hermann Riemann
2016-02-13 10:22:22 UTC
Permalink
Raw Message
Post by Manuel Reimer
wahrscheinlich habe ich nur mit den falschen Begriffen gesucht, aber ich
habe bisher keine definitive Antwort finden können.
Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort abgelegten
Werte in einer globalen Struktur speichere.
Sobald das geschehen ist, wird eine Reihe weiterer Threads gestartet.
Mit diesen will ich *nur lesend* auf die Konfiguration zugreifen.
Geht das ohne Probleme? Nach meinem Verständnis kann ich beliebig oft
auf meine globale Struktur *lesend* zugreifen, denn geschrieben wird ja
nur ein einziges Mal im Hauptthread bevor die anderen Threads gestartet
werden.
Bei kernighan Ritchie Stand
sind die zugehörigen Funktionen open write read und close.
(binäres schreiben und lesen)

Linux-Fans könne die Datei auf tmpfs (bessere RAM disk) legen
und wenn sie Systemprogrammierung verwenden,
shared memory

http://openbook.rheinwerk-verlag.de/unix_guru/node393.html

Hermann
der mit pipe schlechte Erfahrung gemacht hat.
--
http://www.Hermann-Riemann.de
Thomas Orgelmacher
2016-02-13 17:39:57 UTC
Permalink
Raw Message
Post by Hermann Riemann
Bei kernighan Ritchie Stand
sind die zugehörigen Funktionen open write read und close.
(binäres schreiben und lesen)
Linux-Fans könne die Datei auf tmpfs (bessere RAM disk) legen
Für ständige Zugriffe ist das so ziemlich der Worst-Case.
tmpfs hin oder her.
Post by Hermann Riemann
und wenn sie Systemprogrammierung verwenden,
shared memory
Wozu den ganzen Tanz? Threads liegen im gleichen Adressraum.

Shared-Memory bräuchte man erst, wenn man das Prozess übergreifend
machen will.
Post by Hermann Riemann
der mit pipe schlechte Erfahrung gemacht hat.
Wäre zwischen Threads IMHO eh Unsinn.


Gruß, Thomas
--
I have seen things you lusers would not believe. I've seen Sun
monitors on fire off the side of the multimedia lab. I've seen
NTU lights glitter in the dark near the Mail Gate. All these
things will be lost in time, like the root partition last week.
Thomas Jahns
2016-02-15 10:09:38 UTC
Permalink
Raw Message
wahrscheinlich habe ich nur mit den falschen Begriffen gesucht, aber ich habe
bisher keine definitive Antwort finden können.
Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort abgelegten Werte in
einer globalen Struktur speichere.
Sobald das geschehen ist, wird eine Reihe weiterer Threads gestartet. Mit diesen
will ich *nur lesend* auf die Konfiguration zugreifen.
das sollte in allen Multi-Thread-Implementierungen unproblematisch sein.
Gegenbeispiele wären wohl eher zum Quälen von Programmierern als zum produktiven
Verwenden von Threads gedacht. Welche Implementierung schwebt Dir denn vor?
phtreads, OpenMP, Win32/Win64, C11?

Thomas
Rainer Weikusat
2016-02-15 12:56:34 UTC
Permalink
Raw Message
Post by Thomas Jahns
wahrscheinlich habe ich nur mit den falschen Begriffen gesucht, aber ich habe
bisher keine definitive Antwort finden können.
Mein Vorhaben ist, dass ich in einem Programm direkt zu Anfang der
"main"-Routine eine Konfigurationsdatei einlese und die dort abgelegten Werte in
einer globalen Struktur speichere.
Sobald das geschehen ist, wird eine Reihe weiterer Threads gestartet. Mit diesen
will ich *nur lesend* auf die Konfiguration zugreifen.
das sollte in allen Multi-Thread-Implementierungen unproblematisch sein.
Implizit ja, denn man kann mit einiger Berechtigung annehme, das
'erzeuge eine neuen Thread' eine Speicherbarriere beinhaltet (insofern
das nicht von einer anwendbaren Norm gefordert wird). Explizit muesste
man das sicherstellen, dh nach dem die Struktur vollstaendig gefuellt
wurde, fuer eine solche Barriere sorgen und noch fuer eine weitere bevor
ein Thread zum ersten Mal auf sie zugreift.
Georg Bauhaus
2016-02-16 07:58:03 UTC
Permalink
Raw Message
wird eine Reihe weiterer Threads gestartet. Mit diesen will ich *nur lesend* auf die Konfiguration zugreifen.
Es könnte der Hygiene dienen, der Konfiguration eine Schnittstelle
zu verpassen, und hier und da über "volatile" nachzudenken.
--
Grundlagenforschung: Wissen Sie, wonach Ihre eigene Nase riecht?
Loading...