Seite 1 von 2
probleme mit mehreren Threads und Zugriff auf variable
Verfasst: 23.09.2008 13:40
von haggi
He leute,
ich habe vor einiger zeit an einem server/client geschrieben, der für eins meiner Programme gedacht ist. der zweck ist, dass der Server über mehrere Threads läuft und auch auf gemeinsame listen (linked lists oder auch variablen) zugreift. ich bekomme deshalb des öfteren speicher zugriffsfehler wobei sich dadurch mein Programm verabschiedet. die frage ist, kann man diese sachen vill. vorrübergehend für die anderen sperren, und diese dann wieder freigeben wenn der vorgang beendet ist oder habt ihr villeicht ne bessere idee hierfür?
danke schon im vorraus
haggi
Verfasst: 23.09.2008 13:43
von NicTheQuick
Ja, das geht. Schau dir mal Mutex in der PB-Hilfe an. In der neuen Beta 4.30
gibt es glaube ich auch noch Semaphores.
Verfasst: 23.09.2008 13:43
von gnasen
Ähm Mutex()?
edit: zu langsam...
Ansonsten, genau sowas habe ich schonmal geschrieben, kannste dir ja mal anschauen und dich inspirieren lassen
http://www.purebasic.fr/german/viewtopic.php?t=17579
wow wart Ihr schnell!
Verfasst: 23.09.2008 14:28
von haggi
das ging ja tierisch schnell! hätt nett gedacht dass das so schnell geht! danke an euch beiden! werd mir dass mal anschauen, ggf werde ich noch ein oder zwei sachen fragen

Verfasst: 23.09.2008 14:33
von haggi
super gnasen geht genau in die richtung! die ich haben will, wie gesagt will auch nen server machen! ich denk da kann ich einiges rausholen! sag mal, ist das teil auch für mehrere clients geeignet also wenn ich z.b. 5 anfragen hab und da mehrere gleichzeitig kommen? (ich weiß lingt echt doof!) aber da hatte ich bisher probleme damit! damit könntest du mri echt viel arbeit sparen!
danke auch nochmal an NicTheQuick! werde mir dass auf jeden fall auch beides noch anschauen!
gruß haggi
Verfasst: 23.09.2008 15:09
von AND51
Ein Mutex für eine Variable ist ein bisschen viel Overkill.
Braucht man nicht. Für Arrays ebenfalls nicht.
Bei LinkedLists würde ich evtl. Mutex benutzen, weil die dynamisch sind.
Für Variablen und Arrays genügt es jedoch, Threadsafe in den Compileroptionen einzuschalten. Bitte die Hilfe lesen!!!!!!!
Verfasst: 23.09.2008 15:15
von ts-soft
AND51 hat geschrieben:Ein Mutex für eine Variable ist ein bisschen viel Overkill.
Braucht man nicht. Für Arrays ebenfalls nicht.
Bei LinkedLists würde ich evtl. Mutex benutzen, weil die dynamisch sind.
Für Variablen und Arrays genügt es jedoch, Threadsafe in den Compileroptionen einzuschalten. Bitte die Hilfe lesen!!!!!!!
So, so
Threadsafe ist nur für die Libs selber, sowie für den Stringmanager. Nicht für Variablen.
Verfasst: 23.09.2008 15:16
von HeX0R
AND51 hat geschrieben:Bitte die Hilfe lesen!!!!!!!
Bitte den Beitrag lesen!!!!!!!1111
Verfasst: 23.09.2008 15:37
von Bisonte
haggi hat geschrieben:super gnasen geht genau in die richtung! die ich haben will, wie gesagt will auch nen server machen! ich denk da kann ich einiges rausholen! sag mal, ist das teil auch für mehrere clients geeignet also wenn ich z.b. 5 anfragen hab und da mehrere gleichzeitig kommen?
gruß haggi
ich hab das Teil im HardcoreEinsatz (es waren 128 Clients gleichzeitig eingeloggt) getestet ohne Probleme...
Verfasst: 23.09.2008 15:40
von AND51
Gut, ich überarbeite meine Antwort nocheinmal.
Für lokale Dinge (Protected) braucht man kein Threadsafe, außer bei Strings. Lokale Arrays und LinkedLists sind ebenfalls kein Problem.
Um lokale Strings zu verarbeiten sollte Threadsafe aktiviert werden.
Lediglich globale Strings, Arrays, LinkedLists und alle anderen, komplexeren Vorgänge und Ressourcen sollten per Mutex geschützt werden.