Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Function in mehreren Threads gleichzeitig verwenden (https://www.delphipraxis.net/167634-function-mehreren-threads-gleichzeitig-verwenden.html)

Breager 10. Apr 2012 16:13

Function in mehreren Threads gleichzeitig verwenden
 
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ß

Bummi 10. Apr 2012 16:18

AW: Function in mehreren Threads gleichzeitig verwenden
 
Eine "einfache" Funktion Funktion wie Now, Trim etc. ist unproblematisch, wenn Du in der Funktion auf Dateien, Datasets etc. zugreifst musst Du synchronisieren.

Breager 10. Apr 2012 16:28

AW: Function in mehreren Threads gleichzeitig verwenden
 
Hallo Bummi, danke für die schnelle Antwort :-)

Zitat:

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?

jaenicke 10. Apr 2012 16:31

AW: Function in mehreren Threads gleichzeitig verwenden
 
Zitat:

Zitat von Breager (Beitrag 1161032)
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.)

Bummi 10. Apr 2012 16:34

AW: Function in mehreren Threads gleichzeitig verwenden
 
Wenn alle Threads nur lesen AFAIK kein Problem ...

Breager 10. Apr 2012 16:37

AW: Function in mehreren Threads gleichzeitig verwenden
 
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ß

himitsu 10. Apr 2012 20:48

AW: Function in mehreren Threads gleichzeitig verwenden
 
Zitat:

Zitat von Bummi (Beitrag 1161037)
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. :zwinker:

Assarbad 10. Apr 2012 20:56

AW: Function in mehreren Threads gleichzeitig verwenden
 
Zitat:

Zitat von himitsu (Beitrag 1161074)
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. :zwinker:

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 ...

Bummi 10. Apr 2012 21:42

AW: Function in mehreren Threads gleichzeitig verwenden
 
Ich bin selbstredend von Threadeigenen Streams, bzw. in der Prozedur erzeugten/vernichteten Streams ausgegangen.

Breager 10. Apr 2012 22:54

AW: Function in mehreren Threads gleichzeitig verwenden
 
Zitat:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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