Threads und statische Funktionen
-
Wie ist das eigentlich, wenn sich zwei Threads eine statische Funktion teilen.
Beide Threads übergeben je eine andere Referenz an die statische Funktion.
Wenn ein Thread in dem Augenblick unterbrochen wird, in dem sich das Programm gerade mitten in der statischen Funktion befindet und dann der zweite Thread die Funktion aufruft. Kann es Konflikte geben, indem die Referenzen überschrieben werden?
Sollte man die statische Funktion threadsicher machen?
-
Beispiel bitte. Solange eine Funktion keinen State hat sehe ich kein Problem - statisch oder nicht.
-
static void func(ref type_a param) { static int i = 1; param.i = i; } void threadfunc_a() { type_a a; while(1) { ... func(a); ... } } void threadfunc_b() { type_a b; while(1) { ... func(b); ... } }
-
Das ist in Ordnung. Jeder Aufruf legt ja seine eigene Kopie des Parameters auf dem Stack an. Das i und der Code an sich werden zwar geteilt, aber das ist unproblematisch, solange du nicht am i rumfummelst. Wobei hier irgendwie nicht erkennbar ist, was das static überhaupt soll. Benutzt du das nur um die Sichtbarkeit einzuschränken?
-
Stichwort: Eintrittsvarianz.
-
Statische Funktionen sind was anderes! Statische Funktionen haben einfach nur eine lokale Sichtbarkeit (also
static void foo();
! Was du meinst bezieht sich auf lokale statische Variablen. Wenn eine Funktion statische Variablen nutzt, dann sind sie nicht Threadsicher.static hat je nach Kontext mehrere Bedeutungen!
static int var; static void foo(); void bar() { static int i; } void baz(char c[static 10]); // in C99 class a { // in C++ static void foo(); static const int i = 100; };