![]() |
Von mehreren Threads auf dieselbe globale Variable zugreifen?
Wie greift man korrekt aus mehreren Threads auf eine globale Variable zu, wenn diese sogar noch verändert werden darf?
Aktuell prüfe ich bei jedem Schleifendurchgang, ob der Thread der die variable ändern möchte, der letzte Thread in meiner Liste ist. Das verlangsamt meinen Prozess aber etwas. Mein Programm erzeugt bei einer bestimmten Aktion mehrere Threads die dieselbe Arbeit tun. Aber ich habe eine einzige globale Variable, auf die zugegriffen und welche verändert werden muss. Entschuldigung wenn ich mich irre, aber kann man hierfür Queue verwenden?
Delphi-Quellcode:
Queue(
procedure begin // globale Variable verändern end ); |
AW: Von mehreren Threads auf dieselbe globale Variable zugreifen?
Das kommt ganz auf die Art der Änderung an. Addieren, Subtrahieren sollte über TInterlocked geschehen. Bei einfachen Zuweisungen kann man aber nicht vorhersagen, welcher Thread der letzte ist und somit den endgültigen Wert bestimmt. Da hilft auch das Queue nicht. Das sorgt zwar für ein sicheres Schreiben, aber erzwingt nicht eine bestimmte Reihenfolge.
|
AW: Von mehreren Threads auf dieselbe globale Variable zugreifen?
Welchen Typ hat die Variable?
bei einfachen Typen (integer,etc.) sollte es kein Problem geben. Bei records und anderen Strukturen wäre es ganz gut wenn Du ein Flag setzen würdest. zb.
Delphi-Quellcode:
Ob das mit dem sleep so der Bringer ist, keine Ahnung, Ich habe bisher immer nur mit Messages gearbeitet, da brauch ich das nicht.
function readmyvalue:mytype;
begin result:=empty; while flag<>0 do sleep(1); flag:=Mythreadflag; result:=Myvalue; flag:=0; end; Gruß K-H |
AW: Von mehreren Threads auf dieselbe globale Variable zugreifen?
Es handelt sich hierbei um einen Record.
Ich greife aus einer TObjectList auf ein Object zu. Das wird gecastet (Typ des Records) Im Prinzip
Delphi-Quellcode:
aGlobal.iCurrentItemGlobal := TProcess_Record(aFileList.Items[i_]); // iCurrentItemGlobal ist vom Typ TProcess_Record.
Zitat:
|
AW: Von mehreren Threads auf dieselbe globale Variable zugreifen?
Zitat:
Delphi-Quellcode:
denn am Ende beinhalten, bzw. wann wird damit etwas gemacht?
aGlobal.iCurrentItemGlobal
|
AW: Von mehreren Threads auf dieselbe globale Variable zugreifen?
Diese Variable dient nur zur Anzeige. Ein anderer Thread bedient lesend sich dieser Variable.
Daher ist die Reihenfolge vollkommen egal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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