AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Multithreading und Globale Funktionen
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreading und Globale Funktionen

Ein Thema von schwa226 · begonnen am 6. Jan 2011 · letzter Beitrag vom 14. Feb 2011
Antwort Antwort
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#1

AW: Multithreading und Globale Funktionen

  Alt 14. Feb 2011, 14:01
Auch High() wird dir immer das richtige Ergebnis zurückliefern.
Woher nimmst du diese Zuversicht?
Code:
TBytes = array of Byte;
... in Sysutils.pas (RAD Studio 2009). Gibt's da irgendwelche Compiler-Magic oder wie weiß die aufgerufene Funktion über die Länge bescheid? Läuft das wie bei Strings? Habe mir nur noch nicht genügend Gedanken drüber gemacht, daher die Frage.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Multithreading und Globale Funktionen

  Alt 14. Feb 2011, 15:00
Auch High() wird dir immer das richtige Ergebnis zurückliefern.
Woher nimmst du diese Zuversicht?
Code:
TBytes = array of Byte;
... in Sysutils.pas (RAD Studio 2009). Gibt's da irgendwelche Compiler-Magic oder wie weiß die aufgerufene Funktion über die Länge bescheid? Läuft das wie bei Strings? Habe mir nur noch nicht genügend Gedanken drüber gemacht, daher die Frage.
Sowei ich weis, läuft das bei Strings ähnlich: Die Variable ist ein Pointer auf das erste Element, aber vorher (also an einem negativen Offset) wird die Länge seperat gespeichert. length() liest eben diesen Integer (oder sowas) aus und liefert den zurück. Da jeder Thread sein eigenes Array hat, gibt es keine Konflikte
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#3

AW: Multithreading und Globale Funktionen

  Alt 14. Feb 2011, 16:05
Sowei ich weis, läuft das bei Strings ähnlich: Die Variable ist ein Pointer auf das erste Element, aber vorher (also an einem negativen Offset) wird die Länge seperat gespeichert. length() liest eben diesen Integer (oder sowas) aus und liefert den zurück. Da jeder Thread sein eigenes Array hat, gibt es keine Konflikte
Okidok. Danke für die Info

Muß wohl wieder mal Delphiprogramme reversen. Die kommen einem im natürlichen Habitat so selten unter ... muß´ also vorher selber schreiben und dann reversen
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#4

AW: Multithreading und Globale Funktionen

  Alt 14. Feb 2011, 17:54
Ich habe es nun auch live getestet.
3 Threads die die Funktion gleichzeitig nutzen. Ohne Critical Section.
Keine Probleme!
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Multithreading und Globale Funktionen

  Alt 14. Feb 2011, 21:18
Funktionen und Prozeduren sind von Haus immer threadsafe, weil alle lokalen Variablen bei jedem Aufruf neu erzeugt werden. Wäre dem nicht so, könnte man auch keine rekursiven Aufrufe von Proc und Funk machen.

Das Problem sind immer nur die Daten auf die dabei zugegriffen wird.
Also alles was nicht lokal zur Proc/Func gehört kann potentiell kritisch sein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz