![]() |
TInterlocked außerhalb eines TThreads?
Ich säubere gerade meinen Code und ersetze an ein paar Stellen Inc() durch TInterlocked.Add().
Hat TInterlocked überall den Vorteil den der Befehl bringen sollte (Sicherheit beim Schreiben der Variable) oder muss das zwingend aus einem TThread aufgerufen werden? |
AW: TInterlocked außerhalb eines TThreads?
Zitat:
|
AW: TInterlocked außerhalb eines TThreads?
Zitat:
|
AW: TInterlocked außerhalb eines TThreads?
Zitat:
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] |
AW: TInterlocked außerhalb eines TThreads?
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. |
AW: TInterlocked außerhalb eines TThreads?
Zitat:
|
AW: TInterlocked außerhalb eines TThreads?
Zitat:
Das würde ja das hier revidieren: Zitat:
|
AW: TInterlocked außerhalb eines TThreads?
Zitat:
|
AW: TInterlocked außerhalb eines TThreads?
Zitat:
Und umgekehrt denkt jemand vielleicht, dass der Code schon threadsicher ist, obwohl nur die eine Variable threadsicher verändert wird und der Rest nicht geschützt ist. Wenn ich so unseren Code durchschaue, sehe ich nicht viele Stellen, an denen solch ein Interlocked-Befehl ausreicht. Den verwenden wir zur Synchronisation mit anderen Threads, aber für sich genommen würde der nur an ein oder zwei Stellen etwas bringen. Um eine saubere Trennung der Threads usw. kommst du mit so etwas nicht herum... |
AW: TInterlocked außerhalb eines TThreads?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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