Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#1

Multithreading zugriff auf eine THashedStringlist in einem SLB

  Alt 27. Sep 2012, 17:14
Hintergrund:
Also ich schreibe einen SLB der Folgendes leistens wird:
Der SLB vermittelt zwischen einem Webserver (der nur HTML Rendert) und mehreren Instanzen eines Applikationsserver die auf dem selben Rechner laufen. Es wird ein Socket vermittelt. d.h. jede Instanz läuft mit einem anderen Port und später ist das ganze auch auf mehrere Rechner skalierbar.

Dieser SLB verwaltet also eine liste mit Statistischen Daten über Applikationsserver, wie z.B. deren momentan gequeute Jobs oder einen "Lastwert" .

Problem:
Wenn ich auf diese Liste zugreife und z.B. den Server mit der geringsten last gefunden habe,
kann es sein das ein anderer Thread im SLB diesen auch findet und ihn auslastet bevor ich diese Liste aktualisieren kann.

Ist das richtig ?

Muss deswegen alles in einer Criticalsection passieren?

Delphi-Quellcode:
job:=DecodeRequest(sRequest);
CS.Enter;
ServerDaten := getServer(job); //ServerDaten ist ein Element einer global gehaltenen Liste.
ServerDaten.Jobs.add(job.ID,job.timeout);
ServerDaten.lastwert := getLW(ServerDaten.Jobs);
sRespons := EncodeResponse(ServerDaten.Socket);
CS.Leave;
Bremst das nicht definitiv den Server aus , wenn quasi 90% des Codes in einer Crtitcalsection ausgeführt werden?
Einen anderen Weg gibt es wohl nicht, oder?
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (27. Sep 2012 um 17:17 Uhr)
  Mit Zitat antworten Zitat