Variabeln und multithreading

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Variabeln und multithreading

Beitrag von AUGE_OHR »

hi,
lieber noch mal nachfragen bevor ich die email beantworte
1. PUBLICs are MT safe ?
2. STATICs - File wide are MT safe ?
3. STATICs - Function wide are MT safe ?
4. What do you employ to access a shared variable, say a PUBLIC,
when more than one thread could be accessing them at the same time?
Is is guaranteed to be covered transparently by the run-time?
OR program has to employ mutex for safe retrieval/assign?
ad 1.) ich würde sagen JA
ad 2.) ich würde sagen JA
ad 3.) hm ... da bin ich mir nun nicht sicher ...
ad 4.) hm ... gute Frage ... Wenn also "A" die PUBLIC verändert und "gleichzeitig" von "B"
auf die PUBLIC zugegriffen wird ...

Kommentare erwünscht.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Variabeln und multithreading

Beitrag von Jan »

Jimmy,

1) Ja
2) Ja
3) Ja. Hab ich selber schon gemacht, null problemo.
4) Ich würde mal sagen Ja, hab das aber noch nicht bis ins letzte Extrem durchprobiert. Ich würde aber für bestimmte Szenarien aus strategischen Gründen lieber nicht mit einer Public sondern mit der angesprochenen Mutex oder etwas ähnlichem arbeiten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Variabeln und multithreading

Beitrag von brandelh »

Hi,
1. PUBLICs are MT safe ?
die Frage ist doch, was damit gemeint ist oder ?

zu 1. JA: ich stimme euch zu, wenn im Programm sichergestellt ist, dass vor den Threads (und nur dort) die Variable den gewünschten Wert erhält und danach nur noch gelesen wird !

zu 1. NEIN: alles andere ist nicht vorhersagbar ! Kann gutgehen, muss aber nicht.
Da hatten wir doch schon mal einen Thread, bei dem ab und zu mal eine "vorhandene" Variable NIL war ... das kommt von sowas.

Thread-Safe bedeuted doch eigentlich, dass ein Programmteil gleichzeitig in mehreren unabhängigen Threads arbeiten kann ohne sich gegenseitig zu stören - oder habe ich da was falsch verstanden ? Von den Funktionen her gibt es die Forderung, dass eine Funktion "reentrand" sein muss, also sich selbst aufrufen darf und nach und während der Ausführung die "Laufzeit-Umgebung" nicht ändern bzw. stören darf. Näheres hierzu siehe hier: http://de.wikipedia.org/wiki/Threadsicherheit
3) Ja. Hab ich selber schon gemacht, null problemo.
Solange die Funktion immer den letzten Wert im Static zurückgeben soll (so als Ersatz von GLOBAL Variablen) ist das ok.
Was passiert eigentlich wenn eine Funktion aus mehreren Threads aufgerufen wird die intern eine static als Speicher nutzt ?
1 Speicher für alle Threads oder ?
ad 4.) hm ... gute Frage ... Wenn also "A" die PUBLIC verändert und "gleichzeitig" von "B"
auf die PUBLIC zugegriffen wird ...
Also das RUNTIME System stellt bestimmt sicher, dass die Variable zur Zeit des Lesens einen gültigen Inhalt hat (kann auch NIL sein). Somit ist ein Sperren wie bei Dateien bestimmt nicht nötig. Das Problem ist nur, dass bei mehreren Threads die Reihenfolge der Zugriffe und somit der Inhalt der Variablen nicht sicher ist.

Ich denke man muss sehr genau schauen was gemacht werden soll um einigermaßen abschätzen zu können ob es geht oder nicht. Insbesondere wechselseitige Zuweisungen sind problematisch.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Variabeln und multithreading

Beitrag von AUGE_OHR »

brandelh hat geschrieben: Da hatten wir doch schon mal einen Thread, bei dem ab und zu mal eine "vorhandene" Variable NIL war ... das kommt von sowas.
das war wohl ich mit Thread und Errorsys wo die PUBLIC nicht "ankam".

ad 3.) Ich hab für solche Fälle immer ein STATIC Array wo ich per

Code: Alles auswählen

#xtranslate myVar => Stack\[SP,1]
je ein Element pro Thread habe ... "meine" MDI Technik

ad 4.) Ich dachte mir schon das Xbase++ das wohl irgendwie intern regelt. Wer zuerst kommt und
die Reihenfolge sind natürlich grundsätzlich zu beachten.

... hab ich sonst noch was übersehen ?
gruss by OHR
Jimmy
Antworten