probleme mit mehreren Threads und Zugriff auf variable

Anfängerfragen zum Programmieren mit PureBasic.
haggi
Beiträge: 77
Registriert: 04.01.2007 21:54

probleme mit mehreren Threads und Zugriff auf variable

Beitrag 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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag 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
haggi
Beiträge: 77
Registriert: 04.01.2007 21:54

wow wart Ihr schnell!

Beitrag 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 :-)
haggi
Beiträge: 77
Registriert: 04.01.2007 21:54

Beitrag 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
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!!!!!!!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :mrgreen:

Threadsafe ist nur für die Libs selber, sowie für den Stringmanager. Nicht für Variablen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

AND51 hat geschrieben:Bitte die Hilfe lesen!!!!!!!
Bitte den Beitrag lesen!!!!!!!1111
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag 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...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten