Aktuelle Zeit: 19.09.2019 00:04

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: FAQ: Threads in PB
BeitragVerfasst: 04.05.2012 06:51 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:29
STARGÅTE hat geschrieben:
Mutex muss nicht sein, wenn es um Typen wie Long, Integer, Float usw. geht, da diese mit einem Zyklus geschrieben oder gelesen werden.

Hi STARGÅTE,

das stimmt so nicht!
Ob Mutex (oder andere Mechanismen) nötig sind, hängt nicht nur vom Datentyp ab. Angenommen, Du hast einen Zähler den zwei Threads hochzählen, dann brauchst Du da ebenfalls einen Mechanismus, um falsche Ergebnisse zu vermeiden. Das folgende Beispiel aus Wikipedia verdeutlicht dies:
Code:
      Thread A          Thread B
==================================
zähler lesen      ----------------
----------------  zähler lesen
       ::                ::
um 1 erhöhen      ----------------
----------------  um 1 erhöhen
       ::                ::
zähler schreiben  ----------------
----------------  zähler schreiben

_________________
Windows 10 / Windows 7
PB Last Final / Last Beta Testing


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FAQ: Threads in PB
BeitragVerfasst: 04.05.2012 11:10 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Ja natürlich helpy.
Das einrucksvollste Beispiel ist ja, das "X = 1 And X = 0" Wahr ergeben kann:
Code:
Global X.i

Procedure Wechsel(Null)
   Repeat
      X = 1-X
   ForEver
EndProcedure

CreateThread(@Wechsel(), 0)

For N = 1 To 10000
   If X=1 And X=0
      Debug "Ein Wunder"
   EndIf
Next


Mein "muss nicht sein" bezog sich darauf, dass es keine Systemfehler gibt (IMA, Overflow, usw.).

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FAQ: Threads in PB
BeitragVerfasst: 04.05.2012 19:19 
Offline
-= Anfänger =-
Benutzeravatar

Registriert: 29.08.2004 03:07
Die Option 'Threadsafe' schützt nur den PB-Internen String-Puffer in dem intern
Strings bearbeitet werden.

Mit Protected ist es OK, also lokaler String:
Code:
Procedure hallo ( void)
    Protected text.s
    startzeit = ElapsedMilliseconds() + 5000
    Repeat
    text = Str(Random ( 50000)) + "_" + Str(Random ( 50000)) + "_" + Str(Random ( 50000))
    Delay(1)
    PrintN(text)
    Until startzeit < ElapsedMilliseconds()
EndProcedure

OpenConsole ()
For x = 1 To 50
CreateThread ( @hallo () , 0)
Next

Input ()

Macht man text.s Global, muß man den Zugriff auf die Variable selbst absichern.

_________________
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FAQ: Threads in PB
BeitragVerfasst: 05.05.2012 16:09 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
... es wäre sehr nett, wenn ab dem Post von Max_der_Held das
ganze gesplittet werden könnte. Fragen gehören in FAQs nicht wirklich
rein. :D



Max_der_Held hat geschrieben:
Mit Verlaub, damit ich das richtig verstanden habe:

Mit Verlaub könnte man auch kurz und knapp sagen. Nix verstanden. :mrgreen:

Der Vollständigkeit halber:
@Max
Zitat:
Die Konsole ist eine geteile Ressorce. Da PB das nicht selber macht muss auch der Zugriff auf diese geschützt werden. (ändert sich das noch in PB V4.30?)

Das heißt auch die Print-Befehle müssen per Mutex geschützt werden.

MFG PMV

_________________
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye