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?
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
feine erklärung 🙂
mega thx