Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Mär 2012
Ja, sowas hatte ich mir gedacht :)
Aber das ist überflüssig und verkompliziert die Sache unnötig.
Eine CriticalSection sorgt dafür, das innerhalb selbiger nur ein ThreadKontext aktiv ist.
Innerhalb dieses ThreadKontextes kann eine CS aber beliebig oft betreten werden.
Die CS muss aber auch genauso oft wieder verlassen werden damit diese wieder frei für einen anderen ThreadKontext ist....
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Mär 2012
Das kommt darauf an, wie lange das jeweils dauert und inwieweit das aus Konsistenzgründen erforderlich sein muss.
Im Allgemeinen gilt, dass die CS sobald als möglich wieder freigegeben wird.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
19. Mär 2012
Erklär doch mal, wofür du das MustLock in LockList und UnlockList jeweils veränderst.
Das macht in meinen Augen keinen Sinn.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
18. Mär 2012
Die Mühe bei der TList hättest du dir sparen können, wenn du einfach TThreadList benutzen würdest :)
BTW: Du solltest immer mit einem Schutzblock arbeiten:
While not(FCS.TryEnter) do InfiniteLoop;
try
... tue irgendetwas
finally
FSC.Leave;
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
17. Mär 2012
Eigentlich ist das mit der TCriticalSection sehr einfach.
Stell dir eine Kreuzung vor. Die beiden Straßen sind einmal der MainThread und der Thread den du laufen lässt. Die CriticalSection ist nun die Ampel, die dafür sorgt, dass über den Kreuzungspunkt (Zugriff auf die Variable) immer nur eine Fahrbahn (Thread) freigegeben ist.
TMyThread = class( TThread )
strict private
FCS :...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Sir Rufo,
17. Mär 2012
Jo, z.B. TCriticalSection ;)
und auch mal hier schauen TCriticalSection