AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TInterlocked außerhalb eines TThreads?
Thema durchsuchen
Ansicht
Themen-Optionen

TInterlocked außerhalb eines TThreads?

Ein Thema von SneakyBagels · begonnen am 2. Jul 2017 · letzter Beitrag vom 2. Jul 2017
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#1

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 10:54
Hat es denn irgendwelche Nachteile, wenn man trotzdem überall TInterLocked statt Inc verwendet?
Durch den Oberhead beim Aufruf von TInterlocked ist das potentiell weniger performant:

Delphi-Quellcode:
Unit191.pas.39: TInterlocked.Increment(I);
005FA2E4 8D45F8 lea eax,[ebp-$08]
005FA2E7 BA01000000 mov edx,$00000001
005FA2EC E8B725F1FF call TInterlocked.Add
005FA2F1 8945F4 mov [ebp-$0c],eax

Unit191.pas.40: Inc(I);
005FA2F4 FF45F8 inc dword ptr [ebp-$08]
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#2

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 11:05
Ich habe das gerade mal geprüft und eine etwas längere Prozedur gestartet die gewisse Dinge tut - und das 3550 Mal.
Wenn es einen Unterschied gibt, dann liegt der im Millisekundenbereich.
Mit Inc() war der Prozess in 45 Sekunden erledigt, mit TInterLocked.Add in 44.

Und selbst wenn es umgekehrt wäre, würde ich trotzdem TInterLocked aktuell bevorzugen. Ich hatte noch sehr viele Stellen mit Inc und das in einer multithreaded Anwendung.

Geändert von SneakyBagels ( 2. Jul 2017 um 11:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.747 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 11:56
Und selbst wenn es umgekehrt wäre, würde ich trotzdem TInterLocked aktuell bevorzugen. Ich hatte noch sehr viele Stellen mit Inc und das in einer multithreaded Anwendung.
Solange es sich um lokale Variablen handelt, ist Inc genauso "sicher" wie irgendein Interlocked-Befehl. Handelt es sich um globale oder sonstwie mehrfach benutzte Variablen (Felder), dann bedeutet die Verwendung von Interlocked-Befehlen nicht automatisch, dass die Verwendung threadsafe ist. Evtl. erzeugst Du damit lediglich ein falsches Gefühl der Sicherheit.
Thomas Mueller
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#4

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 12:01
Zitat:
dann bedeutet die Verwendung von Interlocked-Befehlen nicht automatisch, dass die Verwendung threadsafe ist. Evtl. erzeugst Du damit lediglich ein falsches Gefühl der Sicherheit.
Wofür soll TInterLocked denn sonst da sein?

Das würde ja das hier revidieren:
Zitat:
Sobald aber auch andere Threads ins Spiel kommen muss das Interlocked immer verwendet werden (auch aus dem Hauptthread) - solange keine anderen Schutzmechanismen (z.B. CriticalSection) aktiv sind.

Geändert von SneakyBagels ( 2. Jul 2017 um 12:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#5

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 13:30
Zitat:
dann bedeutet die Verwendung von Interlocked-Befehlen nicht automatisch, dass die Verwendung threadsafe ist. Evtl. erzeugst Du damit lediglich ein falsches Gefühl der Sicherheit.
Wofür soll TInterLocked denn sonst da sein?

Das würde ja das hier revidieren:
Zitat:
Sobald aber auch andere Threads ins Spiel kommen muss das Interlocked immer verwendet werden (auch aus dem Hauptthread) - solange keine anderen Schutzmechanismen (z.B. CriticalSection) aktiv sind.
Das ist halt eine notwendige Bedingung, aber keine hinreichende.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 20:02 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