Hallo Freak, schön das du zu dem Thema was schreibst.
So brauche ich nicht mehr viel dazu schreiben. Ein Programmcrash ist bei mir auch nicht zwangsläufig ein direkter Absturz des Programmes, sondern für mich auch einfach eine inkorrekte Datenbehandlung.
Da einfach keiner außer den Programmierern sagen kann, wie die Stringverwaltung genau funktioniert, KÖNNTE es ja auch ausreichen, wenn einfach mal die Daten nicht korrekt oder an falscher Stelle geschrieben wären. Das Codebeispiel z.B. müßte theoretisch bei jeder Änderung auch überprüfen ob auch die Daten im string genau so sind wie es sein müßte. Also sagen wir mal gleichzeitig je Thrad noch ein Thread der threadsafe ist und die ausgaben vergleich. Da ein Thread mit Strings aber nie sicher sein kann, wenn mindestens ein Thread unsicher ist, so ist selbst ein sicheres testen unmöglich.
Mir sind bisher auch quasi keine Fehler im Programm aufgefallen, da aber damals (Freak gehört ja auch zum engen PB-kreis) ganz klar gesagt wurde wie es aussieht und das definitiv auch die interne Stringverwaltung beachtet werden muß, so wollte ich euch nur darauf hinweisen.
Ich bin kein Topprogrammierer, weil ich halt auch recht wenig mache, aber ich versuche einfach seit meiner Kindheit Fehlerquellen auszuschliesen.
So z.B. habe ich eine Procedure, jetzt ein Macro das ich anstatt von addelement und creatememory usw. nutze. die meisten überprüfen nicht ob auch überall der speicher korrekt erstellt wurde (besonders wenn man oft speicher allokiert). bei mir wir wenigstens der Code so lange nicht weiter ausgeführt bis Speicher allokiert wurde. Und sei es noch so unwahrscheinlich das Addelement mal einen Fehler auslöst.
Daher hier auch meine "Stringhinweise".
Thema Strings:
String-Operationen verwenden in PB einen globalen Speicherbereich um die Anzahl der Allocations zu verringern, was bei Threads unweigerlich zu Problemen führt.
Selbst wenn es nicht gleich ein Crash ist kann es leicht zu falschen String-Ergebnissen kommen.
Also, Strings+Threads = Threadsafe ist ein Muss. Alles andere ist Lotto.
Das ist es was ich meinte, so aber leider auch noch icht in der Deutlichkeit laß.
Das heißt faktisch, das jeder so programmieren muß wie ich es gesagt habe. Komplett die gesammte Stringverwendung (Variablen, Befehle, Funkionen, denke auch mal Konstanten) muß mit einem einzigen Mutex gesichert sein. Dennoch kann dies bei Programmen die Geschwindigkeitsoptimiert sind sehr vorteilhaft sein. Und mit ein wenig "basteln" (Macros, Proceduren) kann man das recht leicht hinbekommen. Einzig vergessen darf man dann nix
@Freak:
ich denke einer von uns oder wir gemeinsam, sollten mal einen kurzen Text erstellen, der genau das was du jetzt geschrieben hast beinhaltet und dann mit in die PBhilfe unter Threads bzw. "threadsafe" eingefügt wird, damit es wirklich alle genau verstehen.
Ich bedanke mich mal wieder herzlichst bei dir für deine klare und gute Hilfe. (obwohl ich bis auf den globalen Speicherbereich ja schon aufgeklärt war)
@pmv:
bis dahin einfach threadsafe nutzen. PB ist ja keine Schnecke, da sollte es vorläufig auch mal so gehen
@myself: Puh, ausnahmsweise mal gut, daß ich so nervig und stur geblieben bin. Jetzt hat es ja echt mal Licht ins dunkel gebracht
