Laden...

Statische Member

Erstellt von Savage vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.863 Views
S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 19 Jahren
Statische Member

wenn ich z.b. ein datenbankverbindungsobjekt in ein statisches feld packe und mehrere Leute greifen gleichzeitig darauf zu, dann "zerlegt" es die webanwendung klarerweise, da z.b. alle gleichzeichtig über eine verbindung unterschiedlich dinge auslesen wollen.

wie sieht das jedoch bei statischen methoden aus?
angenommen ich habe eine methode, welche einen string als übergabeparameter hat und als rückgabe einen "formatieren" string liefert.
kann es hier auch zu solchen konflikten w.o. kommen wenn viele gleichzeitig darauf zugreifen?

C
1.215 Beiträge seit 2004
vor 19 Jahren

das kommt darauf an...

wenn die statische methode keinerlei variablen oder ressourcen ausserhalb dieser methode (z.b. andere statische member) benutzt bzw. verändert, dann gibt das kein problem, weil die methode komplett auf den stack kopiert wird.

schreibt diese methode z.b. in eine datei, aus der ein anderer gleichzeitiger aufruf aus einem weiteren thread gerade liest, kommt es zu inkonsistenz - wollen zwei gleichzeitig schreiben, sogar zu deadlocks.

bist du aber darauf angewiesen, dass du auf methoden-externe quellen/vars zugreifst, dann sperrst du während des schreibvorgangs einfach diese ressource/variable für andere threads:



private static string threadsafe;

public static string ThreadSafe
{
  get { return threadsafe; }
  set
  {
    lock(ThreadSafe);
    threadsafe = value;
    unlock(ThreadSafe);
  }
}


jetzt ist deine variable threadsicher.

grtz
chief

S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 19 Jahren

feine erklärung 🙂

mega thx