Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Lokale Variable Threadsicher? (https://www.delphipraxis.net/175098-lokale-variable-threadsicher.html)

Uwe Raabe 31. Mai 2013 12:22

AW: Lokale Variable Threadsicher?
 
Zitat:

Zitat von sahimba (Beitrag 1217075)
Zitat:

Zitat von Uwe Raabe (Beitrag 1216951)
In dem konkreten Beispiel wird aber die Klasseninstanz innerhalb der Methode erzeugt und freigegeben. Das ist wiederum sicher.

Das lässt sich so nicht sagen, da wir nicht wissen, was die Instanz der erzeugten Klasse intern "tut". Möglicherweise greift diese auf globale Strukturen zu ohne sich um eine Synchronisierung zu kümmern.

Das hatte ich ja mit den Ausführungen in dem Abschnitt davor gemeint.

In dem Fall liegt das Problem aber nicht in der Methode selbst oder an der dort erzeugten Klasseninstanz (d.h. jeder Methodenaufruf verwendet seine eigene Klasseninstanz - auch bei Multithreading), sondern an der Implementation der Klasse. Darüber können wir aber allenfalls spekulieren.

jaenicke 31. Mai 2013 15:21

AW: Lokale Variable Threadsicher?
 
Zitat:

Zitat von saihttam (Beitrag 1217080)
Es geht darum, dass ein weiterer Service via TCP angesprochen wird. Am Empfängerservice ist zu sehen, dass die Anfragen nahezu zur gleichen Zeit (<=1ms) ankommen und den gleichen Port benutzen.

Und wie wird diese Kommunikation gemacht? Wirklich rein mit lokalen Variablen?

Oder steckt da vielleicht eine TCP-Verbindungskomponente global unter private oder so... (denn ich vermute ja nicht, dass die Verbindung ständig neu aufgebaut wird)

Eine Möglichkeit dies ohne Synchronisation zu lösen:
Statt var einfach threadvar, dann ist die globale Variable threadspezifisch.

saihttam 31. Mai 2013 15:40

AW: Lokale Variable Threadsicher?
 
In diesem Fall wird die Verbindung aufgebaut und direkt wieder geschlossen.

Ich benutze die Indy's TIdTCPClient Klasse. Mein Source ist sehr übersichtlich. Ich glaube deswegen (momentan) nicht, dass es an meinem Source liegt. Variablen benutze ich dort eigentlich nur lesend (Zielname, -port, timeout-Konstanten), der Rest sind die Parameter (rx, tx) der Funktion.

Stimmt 'threadvar' hatte ich schon verdrängt. Werde ich mal versuchen...

Ich mache nu' Feierabend,
euch ein schönes WE!
Gruß Matthias

jaenicke 31. Mai 2013 17:31

AW: Lokale Variable Threadsicher?
 
Zitat:

Zitat von saihttam (Beitrag 1217109)
In diesem Fall wird die Verbindung aufgebaut und direkt wieder geschlossen.

Dann ist es doch korrekt, wenn direkt nacheinander etwas vom selben Port ankommt. Sobald der ausgehende Port wieder geschlossen ist, wird er ja ggf. wiederverwendet.

saihttam 31. Mai 2013 17:42

AW: Lokale Variable Threadsicher?
 
Zitat:

Zitat von jaenicke (Beitrag 1217117)
Sobald der ausgehende Port wieder geschlossen ist, wird er ja ggf. wiederverwendet.

Möglich aber leider unwahrscheintlich, da es bedeuten würde, dass der Service in weniger als einer Millisekunde geantwortet hätte. Allein die DB Anfragen die nötig sind um die Antwort zu Erstellen dauern länger (mind. 100ms).

Grüße Matthias


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Seite 2 von 2     12   

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