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.