![]() |
Mehrere Threads und Felder einer Klasse
Moin,
wenn ich in meinem Programm mehrere Threads habe, die auf die selben Prozeduren eines meiner Objekte zugreifen und diese Prozeduren ändern private(oder was auch immer) Felder meines Objekts, wie mache ich es dann Threadsicher? Mal als doofes Beispiel....
Delphi-Quellcode:
Wenn ich nun 2 Threads habe und diese gleichzeitig proc1 und proc2 aufrufen, könnte die eine Prozedur dann nicht die Laufvariable(f) der anderen ändern?
tblah = class(tobject)
private f: integer; public procedure proc1; procedure proc2; end; ... procedure tblah.proc1; begin for f := 1 to 10000000 do irgendwas; end; procedure tblah.proc2; begin for f := 1 to 500 do irgendwas2; end; Oder läuft das in wirklichkeit hintereinander ab? Ich habe nicht vor eine Multithread applikation zu erstellen, aber trotzdem kam die Frage auf ;) |
Re: Mehrere Threads und Felder einer Klasse
Hi,
du kannst dazu eine sogenannte CriticalSection benutzen (in C(++)/Linux auch als Mutex bekannt):
Delphi-Quellcode:
Versucht nun, ein anderer Thread "Kritisch" aufzurufen, blockiert der Aufruf von Acquire solange, bis der SampleLock vom anderen Thread per Release freigegeben wurde.
var SampleLock:TCriticalSection;
procedure Kritisch; begin SampleLock.Acquire; try // tu was finally SampleLock.Release; end; end; cu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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