AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Function in mehreren Threads gleichzeitig verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Function in mehreren Threads gleichzeitig verwenden

Ein Thema von Breager · begonnen am 10. Apr 2012 · letzter Beitrag vom 10. Apr 2012
Antwort Antwort
Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#1

Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 17:13
Hallo,

ich habe nochmal eine ganz simple Frage zu Threads. Ist es möglich, die Function einer Unit, die nur lokale Variablen benutzt in zwei Threads gleichzeitig zu verwenden, oder könnten dabei Konflikte entstehen? Das ist jetzt vielleicht eine "blöde" Frage, aber ich bin mir diesbezüglich einfach nicht sicher, weil ich noch nicht viel Erfahrungen mit Threads habe.

Die Function greift nur lesend auf eine Datei zu.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 17:18
Eine "einfache" Funktion Funktion wie Now, Trim etc. ist unproblematisch, wenn Du in der Funktion auf Dateien, Datasets etc. zugreifst musst Du synchronisieren.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#3

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 17:28
Hallo Bummi, danke für die schnelle Antwort

Zitat von Bummi:
Wenn Du in der Funktion auf Dateien, Datasets etc. zugreifst musst Du synchronisieren.
Auch wenn ich nur lesend darauf zugreife, also nichts in die Datei schreibe?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 17:31
Auch wenn ich nur lesend darauf zugreife, also nichts in die Datei schreibe?
Wenn parallele Dateizugriffe erlaubt sind (die Datei also nicht dafür gesperrt ist) und du keine globalen Objekte zum Zugriff benutzt, geht das.
(Also z.B. indem du jeweils einen lokalen TFileStream in einer lokalen Variable erstellst.)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 17:34
Wenn alle Threads nur lesen AFAIK kein Problem ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#6

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 17:37
Danke jaenicke und Bummi!

Ja, läuft alles über lokale Variablen innerhalb der Function. Ich brauche nur den Rückgabewert. Die Wahrscheinlichkeit, dass die Function in beiden Threads gleichzeitig verwendet wird, geht gegen null. Ich wollte aber sichergehen, dass es nicht kracht.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 21:48
Wenn alle Threads nur lesen AFAIK kein Problem ...
Nicht immer.

z.B. Lesend auf ein DataSet oder einen Stream zugreifen, das geht nicht, da dort auch bei einem Lesezugriff geschrieben wird.
Beim Stream und DataSet verändert sich ja der Positionszeiger.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

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

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 21:56
z.B. Lesend auf ein DataSet oder einen Stream zugreifen, das geht nicht, da dort auch bei einem Lesezugriff geschrieben wird.
Beim Stream und DataSet verändert sich ja der Positionszeiger.
Und nicht zuletzt könnte Quark herauskommen, weil die gelesenen Daten von Position n und n+m sich zwar aufeinander beziehen, aber einer der Werte zwischenzeitlich geändert wurde. Solange es sich also nicht um atomare Leseoperationen handelt, wäre mindestens zu fragen inwieweit die Integrität der Daten eines Rekords berührt werden ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 22:42
Ich bin selbstredend von Threadeigenen Streams, bzw. in der Prozedur erzeugten/vernichteten Streams ausgegangen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#10

AW: Function in mehreren Threads gleichzeitig verwenden

  Alt 10. Apr 2012, 23:54
Zitat von bummi:
Ich bin selbstredend von Threadeigenen Streams, bzw. in der Prozedur erzeugten/vernichteten Streams ausgegangen.
Was ich ja auch geschrieben habe. Für den reinen Lesezugriff verwende ich nur lokale in der Procedure erzeugte und wieder freigegebene Streams. Vor dem Schreiben in die Datei beende ich den Thread. Die Wahrscheinlichkeit, dass beide Threads gleichzeitig lesend auf ein und dieselbe Datei zugreifen ist in meinem Programm zwar relativ gering aber theoretisch möglich.
  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 08:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz